我有一个应用程序,我可以这样打电话:
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);
然后我看到线程是串行进行的,而不是并行进行的。这不是我想要的。
首先,我实施此方法(有效)是否存在本质上的邪恶,如果是这样,那么正确的方法是什么?
答案 0 :(得分:1)
间接和async / await似乎是不必要的。只需致电
Task.Run(() => myViewModel.ProcessDirectory(rootDirectoryInfo));
顺便说一下,您应始终await
async
,async
函数应返回Task
,但事件处理程序除外。但这一切都是不必要的。