【发布时间】:2014-09-20 09:02:04
【问题描述】:
在递归方法中使用 async/await 的正确方法是什么?这是我的方法:
public string ProcessStream(string streamPosition)
{
var stream = GetStream(streamPosition);
if (stream.Items.count == 0)
return stream.NextPosition;
foreach(var item in stream.Items) {
ProcessItem(item);
}
return ProcessStream(stream.NextPosition)
}
这里是异步/等待的方法:
public async Task<string> ProcessStream(stringstreamPosition)
{
var stream = GetStream(streamPosition);
if (stream.Items.count == 0)
return stream.NextPosition;
foreach(var item in stream.Items) {
await ProcessItem(item); //ProcessItem() is now an async method
}
return await ProcessStream(stream.NextPosition);
}
【问题讨论】:
-
您的尝试是否有任何错误?
-
@StephenCleary 不,似乎工作正常。我只是想知道是否有任何潜在的危险。
-
@zerkms 我的代码如何同步?使用 await 关键字,该方法应该立即返回给调用者,对吗?我今天才开始学习 async/await,所以我的理解可能存在很多差距。
-
@Prabhu:是的,这是我的错误
-
对我来说看起来很正确。不知道你在这里期待什么。
标签: c# .net asynchronous recursion async-await