如何等待任务完成Task.WhenAll?

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)

Jak*_*rtz 7

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

string userEmail = await GetVelocifyData();
Run Code Online (Sandbox Code Playgroud)

Task.WhenAll方法

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

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