問題タブ [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.

0 投票する
1 に答える
470 参照

c# - スレッドがスレッドプールに戻ると、SynchronizationContext.Current はリセットされますか

このコードがあるとしましょう

現在の同期コンテキストがスレッド プールにリークされます。誰かが ThreadPool.QueueUserWorkItem を再度呼び出し、同じスレッドが他の作業項目の処理に使用された場合、そのスレッドの現在の同期コンテキストは null にリセットされますか、それとも MyCustomSynchronizationContext のままになりますか?

Task.Run、BeginInvoke など、スレッド プールでタスクを実行する他の方法にも同じ答えが当てはまりますか?

一般的にTLSはリセットされないことは知っていますが、.NETソースコードは、現在の同期コンテキストのストレージがあまり明確に定義されていないことを示しています(ほとんどの場合、実行コンテキストから来ますが、一部のWinRTでは特別なケースのようです)理由)。

0 投票する
1 に答える
1571 参照

c# - Windows サービスで ConfigureAwait(false) を使用しますか?

私の知る限り、Windows サービス アプリケーションには同期コンテキストはありません。

  • await fooTask.ConfigureAwait(false)Windows サービスのメリットはありますか ?
  • これに落とし穴はありますか?
0 投票する
1 に答える
1011 参照

c# - SynchronizationContext で SendOrPostCallback に複数のパラメーターを渡す

これは、メインの UI フォームで通常の .Invoke または .BeginInvoke ではなく、なぜ SynchronizationContext の .Send または .Post を使用する必要があるのか​​を尋ねた、以前の投稿hereに関連しています。

私の問題は、Invoke で使用していたデリゲートが、ラベルを変更する実際のテキストを保持する 1 つの文字列と、テキストを変更する必要があるラベルの名前を保持する別の文字列の 2 つのパラメーターを取るメソッドに関連付けられていることです。 .

現在の問題は、.Send および .Post が SendOrPostCallbake デリゲートのみを入力として取り、そのデリゲートをパラメーターとして単一のオブジェクトを持つメソッドにのみ関連付けることができることです。すべてをオブジェクトにパックできるため、変数をパックするクラスを作成するか (そのオプションの実装方法は理解しています)、もう 1 つはクロージャーでラムダ式を使用することです。やり方がわからないのは後者です。

基になるメソッドに 2 つの文字列パラメーターがある場合に _synch.Send() でラムダ式を使用する方法についてのガイダンスをいただければ幸いです。

編集。コメントのガイダンスに基づいて、私は自分の質問に答えることができました。将来の訪問者のために、以下のソリューションを投稿しました。