到目前为止这一切都有效,但有两件事让我感到困扰,我认为我使用的是错误的方式
问题#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)
{
}
答案 0 :(得分:7)
您只有一个Task
,因此您可以直接await
。您不需要Task.WhenAll
。
string userEmail = await GetVelocifyData();
创建一个任务,该任务将在可枚举集合中的所有System.Threading.Tasks.Task对象完成时完成。
完成后,任务将返回一个数组,其中包含传递给Task.WhenAll
的所有任务的结果。