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.
总结以上是内存溢出为你收集整理的c# – 如何使任务等待全部内容,希望文章能够帮你解决c# – 如何使任务等待所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)