处理异步代码和同步代码之间的界限?

时间:2017-10-24 22:13:10

标签: c# multithreading asynchronous

我正在尝试编写一些异步c#代码,而我在理解async vs .Wait()的资源方面遇到了一些麻烦。我已经阅读了很多线程和网站,但不知怎的,我仍然不确定如何/为什么我不应该等待。我的计划的目标是:

  1. 异步启动
  2. 做一些工作
  3. 等待#1完成。
  4. 做更多需要#1才能完成
  5. 的工作

    我有任务:

    public static void Main()
    {
        Task t = DoWork();
        DoMoreWork();
        t.Wait();
        DoWorkThatNeedsT();
    }
    
    public Task DoWork()
    {
        return Task.Run(() => {Thread.Sleep(1000);});
    }
    

    据我所知,在这个实例中使用async await只涉及将DoWork()更改为以下内容:

    public async Task DoWork()
    {
        return await Task.Run(() => {Thread.Sleep(1000);});
    }
    

    然后我在调用方法中仍然有一个.Wait()。这是否应该获得无线程异步的好处?我应该以不同的方式实施这个吗?

1 个答案:

答案 0 :(得分:2)

您所描述的并不是async / await的用途。 Async / await用于将线程释放回操作系统以供其他系统使用,同时系统等待无法控制的内容(例如,等待在远程系统上完成sql语句)。

您想要的是与其他代码并行运行任务。使用Task.Run但不要担心异步/等待,因为你什么都没有,你真的在​​等待。

Stephen Cleary - There is no thread非常适合理解何时使用async / await。