Я думал, что TaskEx.WhenAll вернется, когда все задачи будут завершены, что передается в методе. Поэтому await для TaskEx.WhenAll будет возвращать массив операторов Return, так что, когда каждый объект будет завершен, массив будет возвращен.
Но это не так. Когда я делаю:
public async Task AsynchronousCallServerMordernParallelAsync()
{
List<Task<string>> lstTasks = new List<Task<string>>();
StringBuilder builder = new StringBuilder();
for (int i = 2; i <= 10; i++)
{
using (WebClient client = new WebClient())
{
try
{
this.tbStatus.Text = string.Format("Calling Server [{0}]..... ", i);
string currentCall = string.Format(Feed, i);
Task<string> task = client.DownloadStringTaskAsync(new Uri(currentCall));
lstTasks.Add(task);
}
catch (Exception ex)
{
this.tbStatus.Text = string.Format("Error Occurred -- {0} for call :{1}, Trying next", ex.Message, i);
}
}
string[] rss = await TaskEx.WhenAll<string>(lstTasks);
foreach(string s in rss)
builder.Append(s);
MessageBox.Show(string.Format("Downloaded Successfully!!! Total Size : {0} chars.", builder.Length));
}
}
Я вижу, что мой MessageBox появляется несколько раз, а также ожидаю шагов с массивом из 1 элемента, затем с массивом из 2 элементов и так далее
Может кто-нибудь сказать мне, какова природа TakEx. Когда все?