私は、コールバックを使用して(最後に単一のContinueWith()コールバックではなく)段階的にデータをフィードするタスクを長時間実行しています。タスクのインスタンスをタスクのデリゲートに渡す
私は(Task.CurrentIdを使用して)タスクの識別目的のために戻って、このコールバックでオブジェクトのタスクを渡すことができるようにしたい
しかし、私は、タスクデリゲートにTaskオブジェクトを渡す方法を動作することはできません。これを行うためのオーバーロードがないように見えます。その時点でタスクオブジェクトが定義されていないため、クロージャを使用することはできません。
例えば、
public Task StartDoingSomeStuff(CallbackDelegate callback)
{
Task task = Task.Factory.StartNew(() =>
{
while(whatever)
{
var results = DoSomeStuff();
callback(results, task); //CS0165. How do I get hold of the task?
}
});
return task;
}
ができます:
エラーCS0165:未割り当てのローカル変数 'タスク' 変数を宣言し、二つの文にそれにタスクを割り当てる
+1私は同じことを書いていました。 :) 'DoSomeStuff()'の後の行に 'signal.Wait();'を移動させ、ロックを遅らせることもできます。 – Groo
'ManualResetEventSlim signal'の代わりに' lock'文を使う方がいいかもしれません。 @Grooがコメントした後、私はそれに応じて答えを変更しました。 – dtb
が合意しました。私はまだ 'callback'行だけをロックしていますが、パフォーマンスの差は最小限です。 – Groo