返回List的后台工作者的AWAIT / ASYNC示例

时间:2013-08-27 05:05:50

标签: c# async-await c#-5.0

我已经看到了如何将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>;
}

1 个答案:

答案 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的博客上发布一个系列文章,您可能会觉得有帮助。