有人能澄清这个例子中,这当然是不工作:C#异步方法调用一路主
class Program
{
static void Main(string[] args)//main cant' be async
{
int res = test();//I must put await here
Console.WriteLine("END");
}
public async static Task<int> test()
{ //why can't I make it just: public int test()??
int a1, a2, a3, a4;
a1 = await GetNumber1();
a2 = await GetNumber2();
a3 = await GetNumber3();
a4 = a1 + a2 + a3;
return a4;
}
public static async Task<int> GetNumber1()
{
await Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("GetNumber1");
System.Threading.Thread.Sleep(100);
}
});
return 1;
}
我想“收”通过使用来自GenNumberX方法值“等待”。我想使方法“测试”不是异步的。我不明白为什么测试必须是异步的,当我使用等待获得价值。这个例子让我在每一个使用异步的方法上编写异步,当我钻到Main时,我不能使它成为异步?
如何写现实世界的例子:
public bool ReserveAHolliday()
{
bool hotelOK = await ReserveAHotel();//HTTP async request
bool flightOK = await ReserveFlight();////HTTP async request
bool result = hotelOK && flightOK;
return result;
}
如何制作方法ReserveAHolliday同步? 我错过了什么,或者不明白async-await机制的用法吗?
在某些时候,您需要从同步方法中启动一个asynctask。如果你想开火,只需调用它(也称为异步空白,开火并忘记),或者使用'test()。Wait()'来同步等待任务。 – FrankerZ