【发布时间】:2014-09-11 21:07:00
【问题描述】:
我正在使用 Microsoft Web API 2.2 客户端从 API 端点请求数据。获得数据后,我运行 x 个 DoSomeWork。我想确保在运行 DoSomeWork 函数之前先加载数据。
根据下面的代码,我期待以下输出。
“开始 GetSomething” “完成GetSomething” “开始工作#1” “开始工作#2”
但我得到以下信息 “开始GetSomething” “开始工作#1” “完成GetSomething” “开始工作#2”
static void Main()
{
try
{
Task getSomethingTask = Task.Factory.StartNew(()=>GetSomething());
getSomethingTask.Wait();
Task[] tasks = new Task[2] {
Task.Facotry.StartNew(()=>DoSomeWork(1)),
Task.Facotry.StartNew(()=>DoSomeWork(2))
};
Task.WaitAll(tasks);
}
catch(Exception ex)
{
throw ex;
}
}
static async Task GetSomething()
{
Console.WriteLine("Starting GetSomething");
try
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(SOME_URL);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("api/v1/somethings");
somethingList = await response.Content.ReadAsAsync<SomeObject>();
}
catch (Exception)
{
throw;
}
Console.WriteLine("Done with GetSomething");
}
static async Task DoSomeWork(int workNumber)
{
Console.Writeline("Start work#" + workNumber);
}
【问题讨论】:
标签: c# asp.net-web-api task-parallel-library async-await