WinRT CoreDispatcher には、実際には状態変数を取らない RunAsync メソッドがあります。
翻訳: ほとんどの一般的なシナリオで Dispatcher に投稿することによって発生するすべての通知は、閉鎖のために内部的に割り当てられます。シンプルで重要なデザインが見落とされていることは非常に懸念されます。
例: INotifyPropertyChanged を実装する単純な一般的な例では、次のような結果になるメソッドが必要です。
protected virtual void NotifyPropertyChanged(
[CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null)
{
// Check access first, and then at some point pass it along.
Dispatcher.RunAsync(() =>
handler(this, new PropertyChangedEventArgs(propertyName)));
}
}
現在、単純なプロップ変更通知が呼び出されるたびに、舞台裏でコンパイラによって新しいクラスが割り当てられますが、これは多くの通知にとってひどいことです。これにより、SynchronizationContext.Post にフォールバックします。これは、ハンドラーに状態変数があり、propertyName を一緒に渡すことができることを考慮すると、多くの通知がある場合により効率的なオプションです。
このシナリオで Dispatcher を使用する方法についての提案や考えは大歓迎です。