Существует разница между двумя версиями параллельного вызова метода.В версии Task вы определяете код задачи как лямбда-функцию без аргументов, а внутри вы выполняете код
MyAnotherMethod(MyClass.MyField1);
В версии ThreadPool вы определяете задачу, переданную в ThreadPool, каккод метода MyAnotherMethod
, который нужно запустить с начальным параметром MyClass.MyField1
.
Если после вызова ThreadPool.QueueUserWorkItem
вы каким-либо образом измените MyField1
, на запущенную задачу все равно не повлияет, так как MyField1был уже скопирован в стек, и задача начала выполняться.
Если, с другой стороны, вы измените MyField1 после вызова StartNew
, возможно, что гонка данных произойдет до вызова метода внутриВозникает метод Task, и метод внутри Task выполняется с другим значением MyField1.Я надеюсь, вы понимаете, что я пытаюсь сказать здесь ...