【发布时间】:2018-03-26 00:29:32
【问题描述】:
我有 5 个这样的任务:
private async Task<List<Places>> GetPlaces()
{
Stopwatch sw = new Stopwatch();
sw.Start();
var list5 = await GetPlacesTask();
sw.Stop();
Testowybox3.Text = sw.Elapsed.ToString()+" get places times";
return list5;
}
private async Task<List<Categories>> GetCategories()
{
Stopwatch sw = new Stopwatch();
sw.Start();
var list5 = await GetCategoriesTask();
sw.Stop();
Testowybox2.Text = sw.Elapsed.ToString()+" get categories times";
return list5;
}
它们的返回值不同,例如我的第二个任务:
private async Task<EventsInstance[]> GetDetailedData()
{
Stopwatch sw = new Stopwatch();
sw.Start();
list4 = await GetDetailedDataTask();
List<EventsListPrint> lista = new List<EventsListPrint>();
foreach (var VARIABLE in list4)
{
lista.Add(new EventsListPrint() { Date = string.Format("{0:dd.MM.yyyy}", VARIABLE.startDate.Date), Time = VARIABLE.startDate.TimeOfDay.ToString(), Category = VARIABLE.categoryId.ToString(), Where = VARIABLE.organizer.designation, What = VARIABLE.name });
}
fruitdatagrid2.ItemsSource = lista;
sw.Stop();
Testowybox.Text = sw.Elapsed.ToString()+" get detailed data times";
return list4;
}
private async Task<List<Organizers>> GetOrganizers()
{
Stopwatch sw = new Stopwatch();
sw.Start();
var list5 = await GetOrganizersTask();
sw.Stop();
Testowybox4.Text = sw.Elapsed + " get orgzanizers times";
return list5;
}
他们正在从网络解析 Json。我正在像这样从他们那里收集数据:
var DetailedDataList = await GetDetailedData();
var CategoriesList = await GetCategories();
var PlacesList = await GetPlaces();
var OrganizersList = await GetOrganizers();
var EventsList = await GetEvents();
我如何确保它们都已完成?我试过了:
Task.WhenAll(GetDetailedData(), GetCategories(), GetPlaces(), GetOrganizers(), GetEvents());
但我似乎无法检索值。我真正想要实现的是创建能够知道成功完成任务的方法,然后在我的 WPF GUI 中对这些数据进行操作。我也许可以将它们连在一起,但我只是不知道该怎么做。就我使用返回的列表之一而言,一切正常。当尝试使用另一个列表在一个列表上执行 linq 时,有可能另一个列表尚未准备好,它只会让我的应用程序崩溃。
【问题讨论】:
-
你
await Task.WhenAll了吗? -
是的,我做到了。仍然什么都没有,访问返回值时仍然必须使用等待。
标签: c# asynchronous parallel-processing async-await task