c# – 如何使任务等待

前端之家收集整理的这篇文章主要介绍了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.

猜你在找的C#相关文章