我有一个接口(interface)强制我实现(异步)任务:
namespace Microsoft.Owin.Security.Infrastructure
{
public interface IAuthenticationTokenProvider
{
..
Task CreateAsync(AuthenticationTokenCreateContext context);
..
}
}
我想实现这个方法,但我没有等待任何东西。虽然我必须等待某些东西或返回一些任务,否则我的代码无法编译。:
public class MyImplementation: IAuthenticationTokenProvider
{
public async Task CreateAsync(AuthenticationTokenCreateContext context)
{
/// do something synchronously.
await something here? ??
}
}
我的问题是:如何在不异步执行某些操作的情况下实现此方法?我已经找到了几个解决方案(await task.Yield()
或 await Task.Run(() => {}))
,但我不能不完全理解什么是正确的实现及其原因。
最佳答案
无需等待,直接实现方法:
public async Task<Foo> GetFooAsync()
{
return new Foo();
}
即使您没有等待任何东西也没关系。异步方法不需要等待任何事情(尽管编译器会警告您您没有等待任何事情)。
如果您不想要 aysnc 方法的开销(与异步“状态机”相关的成本可能是不可取的),您可以
public Task<Foo> GetFooAsync()
{
return Task.FromResult(new Foo());
}
关于c# - 同步实现异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39894210/