【发布时间】:2022-01-12 06:41:21
【问题描述】:
我有一个返回任务的函数
class Sample
{
TaskCompletionSource<int> _tcs;
..
public Task<int> DoIt(){
StartDoingStuff();
return _tcs.Task;
}
..
private void FinshedStuffCallBack(){
_tsc.SetResult(42);
}
}
来电者去
var sample = new Sample();
var result = await Sample.DoIt();
工作正常
现在我需要在DoIt中做一些额外的事情,这本身就是等待的
我天真地尝试过
public async Task<int> DoIt(){
await DoOtherAsyncStuff();
StartDoingStuff();
return _tcs.Task;
}
但这是不允许的
CS4016 由于这是一个异步方法,返回表达式必须是 输入“int”而不是“任务”
好的,我明白它的意思,但这不是我的意图,我还没有返回值,它会在 StartDoingStuff 触发回调时出现。
不确定下一步该尝试什么。
【问题讨论】:
-
你的代码的目标对我来说不是很清楚,但你可能想要
return await _tcs.Task -
我相信你明白
..不能编译,所以我猜这不是你的真实代码。我们真的很想得到一个minimal reproducible example 能够提供适当的帮助.. -
@StevenFontanella 目标是 StarDoingStuff() 在 DoOtherAsyncStuff 完成之前无法运行。 StartDoingStuff 启动一些将在未来某个时间完成的东西——它在完成时调用 FinishedStuffCallback。 DoIt 的调用者需要等到 StartDoingStuff 完成并从该完成中获取结果
标签: c# async-await