2
我寫了一個測試應用程序來幫助我理解await/async。我有一個方法MethodAsync1()
,它工作正常。但是,當我從Main()調用它時,我無法弄清楚如何等待MethodAsync1()完成。見下面的代碼。如何在Main中使用await
class Program
{
static void Main(string[] args)
{
Debug.WriteLine(DateTime.Now + " Main()1");
Task<String> v1 = MethodAsync1();
Debug.WriteLine(DateTime.Now + " Main()2 - prints out before Method1 finishes");
// I now want to wait for MethosAsync1() to complete before I go further.
// This line has error:
// Error 1 The 'await' operator can only be used within an async
// method. Consider marking this method with the 'async' modifier and
// changing its return type to 'Task'.
String v2 = await v1;
Debug.WriteLine(DateTime.Now + " Main()3 - Method1() now finished");
}
static async Task<String> MethodAsync1()
{
Debug.WriteLine(DateTime.Now + " Method1()1 ");
HttpClient client = new HttpClient();
Task<HttpResponseMessage> responseTask = client.GetAsync("http://bbc.co.uk");
// Do other stuff
Debug.WriteLine(DateTime.Now + " Method1()2 ");
// Wait for it to finish - yield thread back to Main()
var response= await responseTask;
// responseTask has completed - so thread goes back here and method returns fully
Debug.WriteLine(DateTime.Now + " Method1()3 ");
return "finished";
}
}
你可以讓'main'成爲'async'方法嗎? – StriplingWarrior
不,它不會讓我這樣說:''await1.Program.Main(string [])':一個入口點不能用'async'修飾符標記 ' – spiderplant0
爲什麼'main'是異步的?這是沒有意義的。只要阻止其線程,直到獲得結果。 – poke