この単純な質問に対する答えを見つけることができません:BeginInvoke()は、呼び出されたデリゲートをアトミックに実行することが保証されていますか?たとえば、私が次のようなものを持っている場合
public ObservableCollection<string> Items;
public int TotalLenght;
delegate void AddItemDelegate(string arg);
Dispatcher _dispatcher=Dispatcher.CurrentDispatcher;
void StartExecute()
{
for (int index = 0; index < 10; index++)
{
Thread th=new Thread(Run);
th.Start();
}
}
void Run()
{
string item = DoLongRandomDuringCalculations();
_dispatcher.BeginInvoke(new AddItemDelegate(AddItem), item);
}
void AddItem(string item)
{
Items.Add(item);
TotalLength += item.Length;
TakeSnapshot();
}
別のスレッドが更新の最中に計算スレッドがBeginInvokeを正確に呼び出した場合でも、コレクションと他のメンバーの更新が常に同期していることを確認できますか?