Jad*_*ias 6 .net c# concurrency delegates captured-variable
我遇到了问题
foreach(var category in categories)
{
foreach(var word in words)
{
var waitCallback = new WaitCallback(state =>
{
DoSomething(word, category);
});
ThreadPool.QueueUserWorkItem(waitCallback);
}
}
Run Code Online (Sandbox Code Playgroud)
当DoSomething
执行get时,它会接收每个捕获变量的最新值,而不是我想要的值.我可以想象一个解决方案,但它想象你们可以提出更好的解决方案
Hei*_*nzi 13
解决此问题的规范方法是将值复制到在循环内声明的临时变量中.
foreach(var category in categories)
{
var catCopy = category;
foreach(var word in words)
{
var wordCopy = word;
var waitCallback = new WaitCallback(state =>
{
DoSomething(wordCopy, catCopy);
});
ThreadPool.QueueUserWorkItem(waitCallback);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
374 次 |
最近记录: |