2
在過去,我已經做到了這一點:Interlocked.Decrement(i)適用於Parallel.ForEach()嗎?
List<Item> _Items = GetItems();
int _CountDown = _Items.Count;
using (BackgroundWorker _Worker = new BackgroundWorker())
{
_Worker.DoWork += (s, arg) =>
{
DoSomething(_Items[_CountDown]);
};
_Worker.RunWorkerCompleted += (s, arg) =>
{
if (System.Threading.Interlocked.Decrement(ref _CountDown) == 0)
RaiseAllDoneEvent();
else
_Worker.RunWorkerAsync();
};
_Worker.RunWorkerAsync();
}
與並行做somethign這樣的:
List<Item> _Items = GetItems();
int _CountDown = _Items.Count;
System.Threading.Tasks.Parallel.ForEach(_Items, (i) =>
{
DoSomething(i);
if (System.Threading.Interlocked.Decrement(ref _CountDown) == 0)
RaiseAllDoneEvent();
});
我真正的問題是:是Interlocked.Decrement()正確嗎?
是否有一個利用並行的異步選項? –
Sure-Task.Factory.StartNew()。我會編輯來說明。 –
對不起,一個任務神奇地已經利用並行? –