如何在 forach 每個回圈中同時處理多個任務,isconnected 由await item.GetIsConnected()呼叫設定。目前重繪 很慢,所以我希望它們同時處理。
前:
private async void Refresh()
{
foreach (var item in Cars.ToList<Carnet>())
{
await item.GetIsConnected();
if (item.IsConnected)
{
await item.GetCarDetailsAsync();
}
}
}
后:
private async void Refresh()
{
List<Task> listOfTasks = new List<Task>();
foreach (var item in Cars.ToList<Carnet>())
{
listOfTasks.Add(item.GetIsConnected());
if (item.IsConnected)
{
await item.GetCarDetailsAsync();
}
}
await Task.WhenAll(listOfTasks);
}
uj5u.com熱心網友回復:
由于您沒有GetIsConnected()在AFTER示例中等待呼叫,因此回圈將繼續,并且不會檢查呼叫GetIsConnected()完成后的值,我認為您想要做的是添加另一個方法的回傳型別,Task讓方法呼叫GetIsConnected(),await然后在方法內部呼叫GetCarDetailsAsync(),如果需要的話:
//changed to return type of Task, as async void should be avoided
//unless this is an event handler method
private async Task Refresh()
//private async void Refresh() //change to this if event handler
{
List<Task> listOfTasks = new List<Task>();
foreach (var item in Cars.ToList<Carnet>())
{
listOfTasks.Add(GetCarDetails(item));
}
await Task.WhenAll(listOfTasks).ConfigureAwait(false);
}
//method to await the call to GetIsConnect()
//and then call GetCarDetailsAsync() if necessary
private async Task GetCarDetails(Carnet c)
{
await c.GetIsConnected();
if (c.IsConnected)
{
await c.GetCarDetailsAsync();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/476411.html
上一篇:處理自定義矢量類
下一篇:Julia中似然的有效網格近似
