Może ktoś wyjaśnić ten przykład, który oczywiście nie działa:metoda C# asynchroniczny dzwonić przez całą drogę do Main
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;
}
Staram się „zebrać” wartości z metod GenNumberX przy użyciu „czekają”. Chciałbym, aby metoda "testowa" nie była asynchroniczna. Nie rozumiem, dlaczego test musi być asynchroniczny, gdy używam czekać, aby uzyskać wartość. Ten przykład sprawia, że piszę asynchronicznie na każdej metodzie, w której używam asynchronizacji, a kiedy wykonuję drążenie do Main, nie mogę tego zrobić asynchronicznie?
Jak napisać świecie rzeczywistym przykład:
public bool ReserveAHolliday()
{
bool hotelOK = await ReserveAHotel();//HTTP async request
bool flightOK = await ReserveFlight();////HTTP async request
bool result = hotelOK && flightOK;
return result;
}
Jak zrobić metoda ReserveAHolliday synchroniczny? Czy brakuje mi czegoś lub nie rozumiem mechanizmu async-aait?
W pewnym momencie konieczne będzie uruchomienie asynktaksu z metody synchronicznej. Jeśli chcesz strzelać, po prostu wywołaj go (zwane również async voids, fire i forget) lub użyj 'test(). Czekaj()', który będzie czekał na zadanie synchronicznie. – FrankerZ