如何使用Task.WhenAll等待任务完成
本文关键字:任务 等待 WhenAll 何使用 Task | 更新日期: 2023-09-27 18:26:03
到目前为止,这一切都有效,但有两件事困扰着我,我认为我使用了错误的
问题#1-我只想返回一个字符串,但我似乎被迫返回一个数组。我怎么能把这个返回变成字符串呢?
Task<string> taskVelocifyData = GetVelocifyData();
string[] userEmail = await Task.WhenAll(taskVelocifyData);
问题#2-不确定这是否是一个问题,但在进入下一个异步任务之前,等待异步任务完成是最佳的吗?
private async void DispatcherTimer_Tick(object sender, object e)
{
List<string>[] photos = new List<string>[10];
try
{
//Use Velocify API to get most recent lead
Task<string> taskVelocifyData = GetVelocifyData();
string[] userEmail = await Task.WhenAll(taskVelocifyData);
//Ignore recent lead if it has not changed
if (lsi.VelocifyLeadTitle != previousVelocifyLeadTitle)
{
//If there is an email, use FullContact API to get photos
if (userEmail[0] != "")
{
var taskFullContactData = GetFullContactData(userEmail[0]);
photos = await Task.WhenAll(taskFullContactData);
if (photos.Count() != 0)
{
var taskFaceData = GetFaceData(photos);
}
}
else
{
lsi.FullContactPictures = new ObservableCollection<string>();
}
// DEBUG
// dispatcherTimer.Stop();
LeadSpeakerItems.Add(lsi);
SpeakData(leadSpeakerItems.Last().VelocifyLeadTitle);
}
previousVelocifyLeadTitle = lsi.VelocifyLeadTitle;
}
catch (Exception ex)
{
}
您有一个Task
,所以您可以直接await
。你不需要Task.WhenAll
。
string userEmail = await GetVelocifyData();
Task.WhenAll
方法
创建一个任务,该任务将在可枚举集合中的所有System.Threading.Tasks.task对象完成后完成。
完成后,任务将返回一个数组,其中包含传递给Task.WhenAll
的所有任务的结果。