我已经看到了如何将AWAIT / ASYNC与新的4.5框架一起使用的一般示例,但没有关于如何将后台工作程序的使用替换为新构造的一般示例,而这些构造又不会从中调用任何等待的方法。净框架。如何在不使用lambda表达式的情况下这样做,以便返回List?如果main()是UI线程(请原谅psudocode),我正在考虑像下面这样的东西来释放UI
main()
{
List<string> resultSet = await CreateList(dirPath);
console.out(resultSet.ToString());
}
public async List<string> CreateList(string dirPath);
{
//do some work on dirPath NOT CALLING ANY ASYNC methods
return LIST<STRING>;
}
答案 0 :(得分:3)
您没有看到将async
与同步代码一起使用的示例的原因是async
用于异步代码。
也就是说,您可以使用Task.Run
作为BackgroundWorker
的近似替代品。 Task.Run
使您能够采用同步代码并以异步方式使用它:
main()
{
List<string> resultSet = await Task.Run(() => CreateList(dirPath));
console.out(resultSet.ToString());
}
public List<string> CreateList(string dirPath);
{
//do some work on dirPath NOT CALLING ANY ASYNC methods
return LIST<STRING>;
}
我目前正在replacing BackgroundWorker
with Task.Run
的博客上发布一个系列文章,您可能会觉得有帮助。