从函数返回值并启动任务

3
有没有可能有这样的一个函数:
public string Foo()
{
    Task.Factory.StartNew(Foo2());
    return "computedUniqueId";
}

问题是我想在Foo返回值之后开始执行Foo2任务。我问这个问题的原因是,调用Foo()函数的调用者将使用"computedUniqueId"监听信息。Foo2()将触发该信息,因此可能存在这样一种情况:听众不知道要等待什么,并且会错过该消息。 因此,总结一下: 是否有类似于continueWith的东西可以确保Foo()在Foo2()开始之前返回其值?

2个回答

1

这是不可能的,因为return是该方法中发生的最后一件事情。在return之后,被调用的方法已经将控制权和范围交还给了调用者。没有例外。我能想到的最好的办法是,如果你从任何地方调用Foo2来获取返回字符串“computerUniqueId”。

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


0
有类似于continueWith的东西可以断言Foo()返回其值之后再开始执行Foo2()吗?
没有。问题在于你无法控制监听方。如果让监听方提前知道唯一标识符很重要,我建议将其拆分为两个部分,并将唯一标识符传递给任务本身。
public string GenerateFooId()
{ 
    return "computedUniqueId";
}
public void Foo(string id)
{
    Task.Factory.StartNew(Foo2(id));
}

这样,您可以始终保证调用者在启动任务之前就已经了解了ID(因为调用者必须正确提供ID)。将ID设置为自定义类型可以为您提供更多的安全性和控制,因为您可以防止除GenerateFooId之外的任何东西能够生成此ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接