は、私はちょうどこれを書いてと間違って何本当にわからないんだけど:
var t1 = new Task<int>(() => 1)
var r = from x in t1
from y in new Task<int>(() => x + 1)
select y;
r.ContinueWith(x => Console.WriteLine(x.Result));
t1.Start();
またはこの:直接あなたが実際に何をしたいのか表現し
var t = new Task<int>(() => 1)
t.ContinueWith(x => x.Result + 1)
.ContinueWith(x => Console.WriteLine(x.Result))
t.Start();
を。 (これは最初のタスクですが、最初のタスクでStart
を呼び出すのは間違っていますか?)なぜそれを隠す構文を探していますか?
EDIT:固定された第一の例...
EDIT 2追加する:
は、だから私は今、LinqToTasksは、実行中のタスクを返すために、タスクセレクタを期待していることを実現します。最初の例の2番目のfrom
句は、何も実行されないタスクを返します。それでは、あなたが実際に必要なのはこれです:他
var t1 = new Task<int>(() => 1);
var r = from x in t1
from y in Task<int>.Factory.StartNew(() => x + 1)
select y;
r.ContinueWith(x => Console.WriteLine(x.Result));
t1.Start();
何もこれらfrom
句で生産タスクにStart
を呼び出すするつもりはありません。以前のタスクが完了するまで、関連するセレクタは実際には実行されないので、ルートタスクを開始するタイミングはまだ変わりません。
これは動作するようですが、かなり醜いです。しかし、それはLinqToTasksがどのように設計されているかのように見えます...私は通常の関数呼び出し構文に固執すると思います。
私はまだこの質問に答えがあるとは思わない。私はこの問題の解決策にも取り組んでいます。あなたが書いたことを強調するために:_私は仕事を構成したいだけです。それを実行するかどうかの決定はどこでもかまいません。 – Thomas