是否可以拥有这样的功能
public string Foo()
{
Task.Factory.StartNew(Foo2());
return "computedUniqueId";
}
问题是我想开始Foo2任务AFTER Foo返回一个值。我问这个的原因是Foo()函数的调用者将使用“computedUniqueId”监听信息。 Foo2()将触发该信息,因此可能存在一种情况,即侦听器不会等待什么并且将错过该消息。 总结一下: 有什么东西(比如continueWith)会断言Foo()在Foo2()开始之前返回它的值吗?
答案 0 :(得分:1)
这是不可能的,因为return
是该方法中发生的最后一件事。在return
之后,所讨论的方法已将控制和范围放回给调用者。期。我能想到的最好的就是你从字符串“computerUniqueId”返回的地方调用Foo2。
也许如果您提供更多详细信息,我们可以提供更多帮助。感谢。
答案 1 :(得分: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。