В чем разница между Task.Run и System.Threading.ThreadPool.RunAsync? - PullRequest
2 голосов
/ 03 ноября 2019

каково их влияние на многопоточность? Task.Run, кажется, все еще выполняется в том же диспетчере задач текущей многопоточности, а ThreadPool.RunAsync, кажется, больше связан с текущей многопоточностью.

Я заметил, что Task.Run легко автоматически захватывает параметр, который находится за пределамиЭто. Например, если Task.Run вызывает строковый объект вне его, Task.Run может автоматически захватить его.

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

В общем, Task - это абстракция над потоками. Основным преимуществом задач является то, что они позволяют вам меньше концентрироваться на низкоуровневых аспектах многопоточности и упрощают такие вещи, как продолжение. Они также очень хорошо интегрированы в C # и являются основой современного асинхронного программирования. UWP API довольно сильно полагается на async / await, поэтому использование Tasks весьма приветствуется (хотя сам UWP API использует IAsyncOperation для многих своих методов как Task -подобный тип, который совместим со средой выполнения Windows и может бытьвыставлено в библиотеках WinRT).

Для реализации задач используется пул потоков под капотом, поэтому в общем случае, если вам не нужен элемент управления низкого уровня, Tasks должно быть проще для работы.

0 голосов
/ 04 ноября 2019

это ответ в https://social.msdn.microsoft.com/Forums/en-US/9c18a978-4a87-40e2-9294-1346bcd2d528/difference-between-task-and-threadpool. спасибо @aage. В общем, когда вы используете управляемый код, вам нужно использовать Task.Run, так как он нацелен на пул потоков CLR. ThreadPool.RunAsync выполняется в собственном коде и предназначается для пула потоков Windows.

https://social.msdn.microsoft.com/Forums/en-US/9c18a978-4a87-40e2-9294-1346bcd2d528/difference-between-task-and-threadpool

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...