3

有没有可能有这样的功能

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

问题是我想在 Foo 返回一个值之后启动 Foo2 任务。我问这个的原因是 Foo() 函数的调用者将使用“computedUniqueId”监听信息。Foo2() 将触发该信息,因此可能会出现侦听器不会等待什么并且会错过该消息的情况。所以总结一下:有什么东西(比如 continueWith)会断言 Foo() 在 Foo2() 开始之前返回它的值吗?

4

2 回答 2

1

这是不可能的,因为这return是该方法中发生的最后一件事。在 a 之后return,有问题的方法已将控制权和范围交还给调用者。时期。我能想到的最好的方法是,如果您从返回字符串“computerUniqueId”的地方调用 Foo2。

也许如果您提供更多详细信息,我们可以提供更多帮助。谢谢。

于 2012-07-05T20:54:52.920 回答
0

有没有什么东西(比如 continueWith)会断言 Foo() 在 Foo2() 开始之前返回它的值?

不,问题是您无法控制等式的聆听方面。如果侦听器提前知道唯一 ID 很重要,我会将其分成两部分,并将唯一标识符传递给任务本身:

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 回答