0

イベントベースの非同期操作(EAP)を備えたクラスがあります。ここで説明するように、それに基づいてタスクを作成できます。

EAPを使用する場合:

私のスレッド->メソッドを呼び出します->スレッドを作成します->何かをします。

タスクを作成するとき、私はそれを疑っています:

私のスレッド->タスクを作成します->スレッドを作成します->メソッドを呼び出します->スレッドを作成します->何かをします。

それは本当ですか?

編集:

オフコースタスクはスレッドを作成しません-必要に応じてスレッドプールからスレッドを取得します。しかし、それは取られ、スレッドプールから貴重な余分なスレッドを費やす必要がありますか?

4

2 に答える 2

1

何が起こるかを正確に知るには、結果のをどのように使用するかなど、特定のコードを確認する必要がありますTask

Taskただし、一般に、EAPをusingにラップするTaskCompletionSourceと、実行するコードがないため、プールから別のスレッドを使用することはありません。

あなたがそれを使ったらどうなるかということを意味するならContinueWith()Taskそれはあなたが設定したかどうかに依存しますTaskContinuationOptions.ExecuteSynchronously。設定しない場合、継続はプールから取得された「新しい」スレッドで実行されます。設定すると、の結果を設定するのと同じスレッドで実行されますTask。(ExecuteSynchronously非常に短い継続にのみ使用する必要があります。)

ただし、継続がプールから新しいスレッドを取得するかどうか、または他の誰かがプールから取得したスレッドを使用するかどうかはそれほど重要ではありません。重要なのは、操作が完了するまでスレッドがブロックされるかどうかです。そしてどちらの場合も、それは起こりません。

于 2012-07-10T13:33:50.010 に答える
0

2つの新しいスレッドは作成されません。実際、それが新しいスレッドを作成するかどうかさえまったくわかりません。ThreadPoolからすでに存在するものを選択するだけかもしれません。

于 2012-07-10T12:34:47.660 に答える