我正在尝试从基于事件的异步模式转换,其中我使用唯一的 id 和 asynoperationmanager 跟踪运行方法。
由于 Windows 8 应用程序中已经放弃了这种模式,我正在尝试使用 Async/Await 实现类似的效果,但是我还无法想出具体的解决方案。
我想要实现的效果是类似于
private async Task updateSomething()
{
if(***the method is already running***)
{
runagain = true;
}
else
{
await someMethod();
if (runagain)
{
run the method again
}
}
}
我遇到的问题是如何判断方法是否正在运行。我尝试创建一个任务并查看它的状态以及异步方法的.status,但它们似乎不是正确的查找位置。 谢谢
更新:这是我在.net 4中使用的代码,以实现相同的结果。_updateMetaDataAsync是基于事件的异步模式。
private void updateMetaData()
{
if (_updateMetaDataAsync.IsTaskRunning(_updateMetaDataGuid_CheckAllFiles))
{
_updateMetaDataGuid_CheckAllFiles_Again = true;
}
else
{
_updateMetaDataGuid_CheckAllFiles_Again = false;
_updateMetaDataAsync.UpdateMetaDataAsync(_updateMetaDataGuid_CheckAllFiles);
}
}
private void updateMetaDataCompleted(object sender, UpdateMetaDataCompletedEventArgs e)
{
if (_updateMetaDataGuid_CheckAllFiles_Again)
{
updateMetaData();
}
}
await
。你可以直接使用返回的Task
对象,然后对它进行任何你想要的操作,比如使用ContinueWith方法。例如:webClient.DownloadStringAsync(myUri).ContinueWith(t=>Trace.WriteLine("done"));
,这里就没有使用await
。 - Peter Ritchie