W .NET Framework 4.5 dodali bardzo fajne rozwiązanie na programowanie asynchroniczne:
https://msdn.microsoft.com/pl-pl/library/hh191443.aspxJa ostatnio zacząłem robić tak:
1) Tworzę sobie "funkcję timerową" (ta jest niepraktyczna, co sekundę wysyła do wszystkich tę samą wiadomość
![Puszcza oko ;)](https://forum.atnel.pl/images/smilies/icon_e_wink.gif)
):
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
2) W momencie, kiedy potrzebuję włączyć swój "timer" umieszczam w kodzie:
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A działa to mniej więcej tak:
1) Funkcja GameAsync() od momentu odpalenia poleceniem Task.Run() będzie działała w kółko, ponieważ wewnątrz niej jest nieskończona pętla.
2) Najpierw funkcja wywoła inną funkcję, w tym wypadku ServerSendToAll(...)
3) Kiedy już tamta się wykona, nastąpi wyście z funkcji GameAsync() i mogą się wykonywać inne operacje.
4) Kiedy odliczanie dobiegnie końca (dba o to słówko await) program wróci do wnętrza funkcji GameAsync() i kontynuuje swoje działanie, czyli tutaj nastąpi kolejne przejście funkcji. Znowu wyśle wiadomośc do wszystkich, zacznie czekać, wyjdzie z tej funkcji żeby dać innym swobodę działania, i wróci dopiero kiedy Task.Delay(int d) się skończy. I tak w kółko.
Coś czuję, że moje tłumaczenie jest dość marne, ale naprawdę warto zainteresować się tym tematem. Być może mój przykład jest nienajlepszy, ale te nowości można z powodzeniem stosować do innych potrzeb, takich jak czekanie na zapis do pliku czy na odpowiedź serwera HTTP. Przy okazji chciałbym się dowiedzieć, czy takie podejście (ten konkretny przykład) jest w miarę OK.