c# – 如何使任务等待
发布时间:2020-12-15 04:30:15 所属栏目:百科 来源:网络整理
导读:昨天我开始玩微软CTP异步库,无法找到正确执行等待的任务.我知道它必须有这样的实现: public struct SampleAwaiterT{ private readonly TaskT task; public SampleAwaiter(TaskT task) { this.task = task; } public bool IsCompleted { get { return task.I
昨天我开始玩微软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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |