問題タブ [synchronizationcontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - スレッドがスレッドプールに戻ると、SynchronizationContext.Current はリセットされますか
このコードがあるとしましょう
現在の同期コンテキストがスレッド プールにリークされます。誰かが ThreadPool.QueueUserWorkItem を再度呼び出し、同じスレッドが他の作業項目の処理に使用された場合、そのスレッドの現在の同期コンテキストは null にリセットされますか、それとも MyCustomSynchronizationContext のままになりますか?
Task.Run、BeginInvoke など、スレッド プールでタスクを実行する他の方法にも同じ答えが当てはまりますか?
一般的にTLSはリセットされないことは知っていますが、.NETソースコードは、現在の同期コンテキストのストレージがあまり明確に定義されていないことを示しています(ほとんどの場合、実行コンテキストから来ますが、一部のWinRTでは特別なケースのようです)理由)。
c# - Windows サービスで ConfigureAwait(false) を使用しますか?
私の知る限り、Windows サービス アプリケーションには同期コンテキストはありません。
await fooTask.ConfigureAwait(false)
Windows サービスのメリットはありますか ?- これに落とし穴はありますか?
c# - SynchronizationContext で SendOrPostCallback に複数のパラメーターを渡す
これは、メインの UI フォームで通常の .Invoke または .BeginInvoke ではなく、なぜ SynchronizationContext の .Send または .Post を使用する必要があるのかを尋ねた、以前の投稿hereに関連しています。
私の問題は、Invoke で使用していたデリゲートが、ラベルを変更する実際のテキストを保持する 1 つの文字列と、テキストを変更する必要があるラベルの名前を保持する別の文字列の 2 つのパラメーターを取るメソッドに関連付けられていることです。 .
現在の問題は、.Send および .Post が SendOrPostCallbake デリゲートのみを入力として取り、そのデリゲートをパラメーターとして単一のオブジェクトを持つメソッドにのみ関連付けることができることです。すべてをオブジェクトにパックできるため、変数をパックするクラスを作成するか (そのオプションの実装方法は理解しています)、もう 1 つはクロージャーでラムダ式を使用することです。やり方がわからないのは後者です。
基になるメソッドに 2 つの文字列パラメーターがある場合に _synch.Send() でラムダ式を使用する方法についてのガイダンスをいただければ幸いです。
編集。コメントのガイダンスに基づいて、私は自分の質問に答えることができました。将来の訪問者のために、以下のソリューションを投稿しました。