如何使用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.WhenAll等待任务完成

您有一个Task,所以您可以直接await。你不需要Task.WhenAll

string userEmail = await GetVelocifyData();

Task.WhenAll方法

创建一个任务,该任务将在可枚举集合中的所有System.Threading.Tasks.task对象完成后完成。

完成后,任务将返回一个数组,其中包含传递给Task.WhenAll的所有任务的结果。