加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读