pun*_*ter 1 c# multithreading task async-await
到目前为止这一切都有效,但有两件事让我感到困扰,我认为我使用的是错误的方式
问题#1 - 我只想返回一个字符串,但我似乎被迫返回一个字符串ARRAY.我怎样才能让这个返回一个字符串?
Task<string> taskVelocifyData = GetVelocifyData();
string[] userEmail = await Task.WhenAll(taskVelocifyData);
Run Code Online (Sandbox Code Playgroud)
问题#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)
{
}
Run Code Online (Sandbox Code Playgroud)
你有一个Task,所以你可以await直接.你不需要Task.WhenAll.
string userEmail = await GetVelocifyData();
Run Code Online (Sandbox Code Playgroud)
该Task.WhenAll方法
创建一个任务,该任务将在可枚举集合中的所有System.Threading.Tasks.Task对象完成时完成.
完成后,任务将返回一个数组,其中包含传递给所有任务的结果Task.WhenAll.