[英]How to wait for Tasks to finish with Task.WhenAll ?
到目前為止,所有方法都有效,但是有兩件事困擾着我,我認為我使用了錯誤的方式
問題#1-我只想返回一個字符串,但是我似乎被迫返回一個字符串ARRAY。 我怎樣才能使它返回一個字符串?
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();
創建一個將在可枚舉集合中的所有System.Threading.Tasks.Task對象都完成時完成的任務。
完成后,任務將返回一個數組,其中包含所有傳遞給Task.WhenAll
任務的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.