和asynoperationmanager来跟踪运行方法。由于它现在已从Windows8应用程序中删除,我试图获得与Async/Await类似的效果,但不知道如何实现。我想要实现的是privateasyncTaskupdateSomething(){if(***该方法已经在运行***){runagain=true;}else{awaitsomeMethod();if(runagain){runthemethodagain}}}我正在努力的部分是找出方法是否正在运行。我已经尝试创建一个任务并查看该异步方法和.status的状态,但它们看起来不正确。谢谢更新:这是我在.net4中使用的当前代码,以实现相同的结果。_updateMetaDataAsync是一个基于事件的异步模式类。privatevoidupdateMetaData(){if(_updateMetaDataAsync.IsTaskRunning(_updateMetaDataGuid_CheckAllFiles)){_updateMetaDataGuid_CheckAllFiles_Again=true;}else{_updateMetaDataGuid_CheckAllFiles_Again=false;_updateMetaDataAsync.UpdateMetaDataAsync(_updateMetaDataGuid_CheckAllFiles);}}privatevoidupdateMetaDataCompleted(objectsender,UpdateMetaDataCompletedEventArgse){if(_updateMetaDataGuid_CheckAllFiles_Again){updateMetaData();async/await本身旨在用于创建从UI线程异步执行的顺序操作。您可以让它并行执行操作,但通常操作会“连接”回UI线程并产生一些结果。(也可以在等待时执行“即发即弃”类型的异步操作,但不推荐这样做)。即async/await没有任何内在的进度报告支持。您可以使用async/await从代码中获取进度;但你需要使用像IProgress这样的新进度界面。请参阅http://blogs.msdn.com/b/dotnet/archive/2012/06/06/async-in-4-5-enabling-progress-and-cancellation-in-async-apis.aspx。迁移到这里应该只调用IProgress委托而不是Progress事件。如果您使用的是您创建的任务,则可以检查任务的状态属性(或者如果完成是您感兴趣的唯一状态,则只需查看Task.IsCompleted)。也就是说,在操作完成、抛出异常或取消之前,await不会“返回”。您基本上可以安全地假设,如果您仍在“等待”,则您的任务尚未完成。SemaphoreSlimqueueToAccessQueue=newSemaphoreSlim(1);对象队列锁=新对象();长队列请求=0;任务_loadingTask;publicvoidRetrieveItems(){lock(queueLock){queuedRequests++;if(queuedRequests==1){//在另一个实例排队之前队列的最小大小_loadingTask=_loadingTask?.ContinueWith(async()=>{RunTheMethodAgain();awaitqueueToAccessQueue.WaitAsync();queuedRequests=0;//表示队列已经清空;.Release()})??Task.Run(async()=>{RunTheMethodAgain();awaitqueueToAccessQueue.WaitAsync();queuedRequests=0;//表示队列已经清空;queueToAccessQueue.Release(););}}}publicvoidRunTheMethodAgain(){**再次运行该方法**}额外的好处是您可以看到队列中有多少项目!以上是C#学习教程:如何跟踪异步/等待任务是否正在运行。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
