title: How to wait for Tasks to finish with Task.WhenAll ?
body: <p>This all works so far but there are 2 things that bother me and I think I am using the wrong way</p>
  
  <p>Problem #1 - I only want to return a string but I seem forced to return a string ARRAY. How can I just make this return a string ? </p>
  
  <pre><code>   Task&lt;string&gt; taskVelocifyData = GetVelocifyData();
              string[] userEmail = await Task.WhenAll(taskVelocifyData);
  </code></pre>
  
  <p>Problem #2 - Not sure if this is a problem but is this the optimal to wait for async tasks to complete before going to the next async task ? </p>
  
  <pre><code>  private async void DispatcherTimer_Tick(object sender, object e)
      {
          List&lt;string&gt;[] photos = new List&lt;string&gt;[10];
  
          try
          {
              //Use Velocify API to get most recent lead
              Task&lt;string&gt; 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&lt;string&gt;();
                  }
  
                  // DEBUG
                  //   dispatcherTimer.Stop();
  
                  LeadSpeakerItems.Add(lsi);
  
                  SpeakData(leadSpeakerItems.Last().VelocifyLeadTitle);
              }
  
              previousVelocifyLeadTitle = lsi.VelocifyLeadTitle;
          }
          catch (Exception ex)
          {
  
          }
  </code></pre>