4.5中的async是否意味着只需输入函数就可以启动一个新线程



或者我必须使用Task.在方法中运行以确保每个函数都存在于自己的线程上?我试着看看在我正在研究的代码中,这种做法是否有智慧

public async Task<string> GetAStringAfterSyncProcessing(string processThis) {
       return await Task.Run(async () => { 
              var processThis2 = processThis + ",";
              var processThis3 = processThis2 + ",";
              var nowImDone = processThis3 + ",";
              return nowImDone;
       });
}

我有一种感觉,这是一种无意的设计,因为它使调试时不可能遍历每一行。因此,我想知道我是否正确地向其他人解释了async自动意味着创建一个新线程,以便只有在使用wait或.GetAwaiter().GetResult()时才调用该函数。感谢

否,async本身不会创建新线程。

在您演示的代码中使用async/await是没有意义的。它主要相当于:

public Task<string> GetAStringAfterSyncProcessing(string processThis) {
    return Task.Run(() => { 
        var processThis2 = processThis + ",";
        var processThis3 = processThis2 + ",";
        var nowImDone = processThis3 + ",";
        return nowImDone;
    });
}

(我也删除了异步lambda,这是不必要的。)

下一篇:

因此,我想知道我是否正确地向其他人解释了async自动意味着创建一个新线程,以便只有在等待或使用.GetAwaiter().GetResult()时才调用该函数。

不,这绝对不是正确的解释。很难在一个SO的答案中给出完整的答案,但我强烈建议您去阅读MSDN资源,了解async/await的实际内容。有一种期望是,无论您等待什么,都将是本质上异步的——这是因为它本身启动了一个线程,或者因为它不需要一个线程才能异步(例如异步IO)。

相关内容

最新更新