C# · 12月 22, 2021

c# – 如何使任务等待

昨天我开始玩微软CTP异步库,无法找到正确执行等待的任务.我知道它必须有这样的实现: public struct SampleAwaiter<T>{ private readonly Task<T> task; public SampleAwaiter(Task<T> task) { this.task = task; } public bool IsCompleted { get { return task.IsCompleted; } } public void OnCompleted(Action continuation) { TaskEx.Run(continuation); } public T GetResult() { return task.Result; }}

但是我现在如何实现一个任务,让我们等待5秒钟,并返回一些字符串,例如“Hello World”?

一种方法是直接使用任务:

Task<string> task = TaskEx.Run( () => { Thread.Sleep(5000); return “Hello World”; }); string str = await task;

但是,如何等待实施呢?还是我只是误解了一切?

感谢任何信息/帮助:)

解决方法 这里的关键是AsyncCtpThreadingExtensions.GetAwaiter,它通过扩展方法提供这些方法.由于异步实现是基于模式的(如LINQ),而不是绑定到特定的接口,它可以来自任何地方(在这种情况下是TaskAwaiter).

你写的代码是等待的.例如:

static void Main(){ test(); Console.ReadLine(); // so the exe doesn’t burninate}static async void test() { Task<string> task = TaskEx.Run( () => { Thread.Sleep(5000); return “Hello World”; }); string str = await task; Console.WriteLine(str);}

5秒后打印Hello World.