c# - 同步实现异步方法

标签 c# asynchronous task

我有一个接口(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/

相关文章:

c# - `internal` 和单个项目的 `public` 一样吗?

swift - 在 UITableViewCell 内执行耗时的任务,滚动时暂停

javascript - 为什么包含在一个字符串变量中的 Javascript 一旦被分配给另一个字符串变量就会立即执行?

C# - 当我使用 task::wait() 方法时它抛出异常

inno-setup - 控制自定义页面在特定任务后显示

c# - 在 Visual Studio 2010 扩展中获取默认项目目录

c# - 检查空或 null List<string>

java - AsyncTask 在 Kotlin 中的使用

c# - 任务不能并行运行

c# - 如何在同一直线斜率上的另一个圆后面画一个圆?