Czy ktoś mógłby mi pokazać mały fragment kodu, który pokazuje, jak wywołać metodę asynchronicznie w języku C #?
źródło
Czy ktoś mógłby mi pokazać mały fragment kodu, który pokazuje, jak wywołać metodę asynchronicznie w języku C #?
Jeśli używasz action.BeginInvoke (), musisz gdzieś wywołać EndInvoke - w przeciwnym razie framework musi przechowywać wynik wywołania asynchronicznego na stercie, powodując wyciek pamięci.
Jeśli nie chcesz przeskakiwać do C # 5 ze słowami kluczowymi async / await, możesz po prostu użyć biblioteki Task Parallels w .Net 4. Jest o wiele, dużo przyjemniejsza niż użycie BeginInvoke / EndInvoke i zapewnia czysty sposób odpalania. i-zapomnij dla zadań asynchronicznych:
using System.Threading.Tasks;
...
void Foo(){}
...
new Task(Foo).Start();
Jeśli masz metody do wywołania, które pobierają parametry, możesz użyć lambdy, aby uprościć wywołanie bez konieczności tworzenia delegatów:
void Foo2(int x, string y)
{
return;
}
...
new Task(() => { Foo2(42, "life, the universe, and everything");}).Start();
Jestem prawie pewien (ale wprawdzie nie jest to pozytywne), że składnia C # 5 async / await jest po prostu cukrem składniowym wokół biblioteki zadań.
Począwszy od .Net 4.5 możesz użyć Task.Run, aby po prostu rozpocząć akcję:
Task.Run vs Task.Factory.StartNew
źródło
Oto sposób, aby to zrobić:
Oczywiście musisz zastąpić
Action
delegata innym typem, jeśli metoda ma inny podpisźródło
Przeczytaj artykuł MSDN Asynchronous Programming with Async and Await, jeśli możesz sobie pozwolić na zabawę z nowymi rzeczami. Został dodany do .NET 4.5.
Przykładowy fragment kodu z linku (który sam pochodzi z tego przykładowego projektu kodu MSDN ):
Cytowanie:
Więcej szczegółów w linku .
źródło
źródło