异步代码实现的正确性

时间:2014-09-05 23:42:41

标签: c# multithreading async-await

我有一个应用程序,我可以这样打电话:

myViewModel.ProcessDirectoryAsync(rootDirectoryInfo);

并在myViewModel中:

public async ProcessDirectoryAsync(DirectoryInfo rootDirectoryInfo)
{
    await Task.Run(() => ProcessDirectory(rootDirectoryInfo));
}

public void ProcessDirectory(DirectoryInfo rootDirectoryInfo)
{
    // do work and update progress in UI with a bunch of data
}

我的想法是,我希望我的ui显示多个工作线程,每个线程都会独立更新UI及其进度和数据。

这段代码很好用。

但我不知道这是不对的。如果我在这一行上等待(由resharper :)推荐):

await myViewModel.ProcessDirectoryAsync(rootDirectoryInfo);

然后我看到线程是串行进行的,而不是并行进行的。这不是我想要的。

首先,我实施此方法(有效)是否存在本质上的邪恶,如果是这样,那么正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

间接和async / await似乎是不必要的。只需致电

Task.Run(() => myViewModel.ProcessDirectory(rootDirectoryInfo));

顺便说一下,您应始终await asyncasync函数应返回Task,但事件处理程序除外。但这一切都是不必要的。