【发布时间】:2015-11-28 11:14:31
【问题描述】:
以下方法循环通过 postdata 列表以对令牌发出多个请求,例如每个请求使用特定的 clientID。我的问题与异步有关。我正在尝试对令牌进行异步调用。 .Result 的使用是否必然使方法同步?
public async Task<string> ReturnDataFromUrl1(List<List<KeyValuePair<string, string>>> listOfPostData)
{
List<Task<string>> taskList = new List<Task<string>>();
string allTokens = "";
List<Task<string>> downloadTasks = new List<Task<string>>();
foreach (var postData in listOfPostData)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:23081");
HttpContent httpContent = new FormUrlEncodedContent(postData);
HttpResponseMessage response = client.PostAsync("/Token", httpContent).Result;
var responsecode = (int)response.StatusCode;
if (response.IsSuccessStatusCode)
{
var responseBodyAsText = response.Content.ReadAsStringAsync();
taskList.Add(responseBodyAsText);
}
}
}
downloadTasks = taskList.ToList();
while (downloadTasks.Count > 0)
{
Task<string> firstFinishedTask = await Task.WhenAny(downloadTasks);
downloadTasks.Remove(firstFinishedTask);
// Await the completed task.
string content = await firstFinishedTask;
allTokens = allTokens + content;
}
return allTokens;
}
【问题讨论】:
标签: c# asynchronous async-await task-parallel-library httpclient