Jak rozumiem, Task.Yield
na początku metody zmusi dzwoniącego, aby kontynuował, jeśli nie oczekuje na metodę. Tymczasem Task.Run
i ConfigureAwait(false)
both uruchom zadanie na nowym wątku puli wątków, co ponownie zmusi wywołującego do kontynuacji, jeśli nie oczekuje na metodę.Jaka jest różnica między Task.Yield, Task.Run i ConfigureAwait (false)?
Nie mogę zrozumieć różnicy między Task.Yield
a uruchomieniem nowego wątku puli wątków, ponieważ zaraz po tym, jak powróci on do wywołującego, będzie kontynuował wykonywanie reszty metody, która jest w zasadzie tym samym.
This postu sugeruje, że Yield
i Task.Factory.StartNew
(co jest naprawdę stara wersja Task.Run
) można stosować zamiennie, co wydaje się dziwne dla mnie.
Task.Run = Task.Factory.StartNew – hungndv
@hungndv 'Task.Run' to' Task.Factory.StartNew', ale w domyślnym harmonogramie zadań (harmonogram zadań puli wątków). 'Task.Factory.StartNew' bez określania harmonogramu zadań wybierze bieżący harmonogram zadań, który może nie być domyślny. Może to być na przykład program do planowania zadań interfejsu użytkownika. 'Task.Run' zawsze wykonuje się w wątku. Tak więc 'Task.Run' jest szczególnym przypadkiem' Task.Factory.StartNew', i ** not ** jego nowej wersji –