Dav*_*inP 9 c# async-await async-ctp
昨天我开始玩Microsoft 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; }
}
Run Code Online (Sandbox Code Playgroud)
但是,我现在如何实现一个任务,比如等待5秒,然后返回一些字符串,例如"Hello World"?
一种方法是直接使用Task,如下所示:
Task<string> task = TaskEx.Run(
() =>
{
Thread.Sleep(5000);
return "Hello World";
});
string str = await task;
Run Code Online (Sandbox Code Playgroud)
但是,如何通过等待实施来做到这一点?或者我只是误解了一切?
感谢您的任何信息/帮助:)
Mar*_*ell 16
这里的关键是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);
}
Run Code Online (Sandbox Code Playgroud)
Hello World5秒后打印.
| 归档时间: |
|
| 查看次数: |
16473 次 |
| 最近记录: |