Я пытаюсь понять, как работает асинхронизм, но есть один случай, который я максимально упростил и не могу найти объяснения этому.
В проекте mvc asp.net framework4.6:
...
public class Test {
public static void Work(int id) {
if (id == Thread.CurrentThread.ManagedThreadId) {
Debug.WriteLine("******************************");
Debug.WriteLine("*** BOOOMMMM !!!!!!! ***");
Debug.WriteLine("******************************");
}
}
}
public class HomeController : Controller {
public ActionResult Index() {
var id = Thread.CurrentThread.ManagedThreadId;
Task.Run(() => { Test.Work(id); });
return View();
}
...
при выполнении кода выше:
if (id == Thread.CurrentThread.ManagedThreadId)
никогда не проверяется.DoWork () работает в другом потоке, чем мой основной.Там для меня это нормально, это то, что я всегда понимал в ходе моих чтений.
Но если я ставлю Wait на Task.Run
Task.Run(() => { Test.Work(id); }).Wait();
иногда это другой поток, чемосновной, а иногда нет, и я не понимаю.
Здесь написано:
Task.Run запускает задачу в пуле потоковсделать расчеты.Пул потоков ASP.NET имеет дело с (неожиданно) потерей одного из потоков в течение этого запроса.
Хорошо, в его примере нет Wait (), но какая разница это делаетmake, Wait () вызывается после Work () в любом случае, поэтому Work () всегда должен вести себя одинаково независимо от того, есть ли Wait () или нет.
Если кто-нибудь может дать мне объяснение, я был бы оченьпризнателен.