Jes*_*ter 0 c# task-parallel-library async-await
我正在开发一个C#控制台应用程序,它将负责运行一系列任务.其基本结构如下:
var tasks = workItems.Select(x => Task.Factory.StartNew(() =>
{
DoSomeWork(x);
})).ToArray();
Task.WaitAll(tasks);
Run Code Online (Sandbox Code Playgroud)
问题是DoSomeWork()是一个异步方法,等待另一个任务的结果,它还需要等待对Facebook API的调用. http://facebooksdk.net/docs/reference/SDK/Facebook.FacebookClient.html#GetTaskAsync(string)
public async void DoSomeWork(WorkItem item)
{
var results = await GetWorkData();
}
public async Task<List<WorkData>> GetWorkData()
{
var fbClient = new FacebookClient();
var task = fbClient.GetTaskAsync("something");
var fbResults = await task;
};
Run Code Online (Sandbox Code Playgroud)
我以为我能够通过调用Task.WaitAll()来支持这种嵌套任务的概念,但父任务的执行几乎立即完成.在应用程序的末尾放置一个Console.ReadLine()以防止它提前执行,这表明结果确实会在稍后从Facebook返回.
我是否遗漏了一些明显的东西,或者是否有更好的方法来阻止我的任务集合,这将允许这种情况?
DoSomeWork不需要回来void.通过不返回Task呼叫者无法知道何时完成.
此外,它已经异步,所以没有理由在StartNew这里使用.DoSomeWork直接打电话,因为它应该返回一个Task.
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |