3

このような機能を持つことは可能ですか?

public string Foo()
{
    Task.Factory.StartNew(Foo2());
    return "computedUniqueId";
}

問題は、Fooが値を返した後にFoo2タスクを開始したいということです。私がこれを尋ねる理由は、Foo()関数の呼び出し元がその「computedUniqueId」で情報をリッスンするためです。Foo2()はその情報をトリガーするため、リスナーが何を待つべきかわからず、そのメッセージを見逃す可能性があります。要約すると、Foo2()が起動する前にFoo()がその値を返すことを主張する何か(continueWithなど)はありますか?

4

2 に答える 2

1

returnそれはその方法で起こる最後のことなので不可能です。の後にreturn、問題のメソッドは制御とスコープを呼び出し元に戻しました。限目。私が考えることができる最善の方法は、文字列「computerUniqueId」が返される場所からFoo2を呼び出す場合です。

たぶん、あなたがより多くの詳細を提供するならば、我々はより多くを助けることができます。ありがとう。

于 2012-07-05T20:54:52.920 に答える
0

Foo2()が起動する前にFoo()がその値を返すことを主張する何か(continueWithのような)はありますか?

いいえ。問題は、方程式のリスニング側を制御できないことです。リスナーが一意のIDを事前に知っていることが重要な場合は、これを2つの部分に分割し、一意の識別子をタスク自体に渡します。

public string GenerateFooId()
{ 
    return "computedUniqueId";
}
public void Foo(string id)
{
    Task.Factory.StartNew(Foo2(id));
}

このようにして、タスクを開始する前に発信者がIDを知っていることを常に保証できます(発信者はIDを適切に提供する必要があるため)。IDをカスタムタイプにすると、GenerateFooIdこのIDを生成できなくなる可能性があるため、安全性と制御性が向上します。

于 2012-07-05T20:55:47.017 に答える