c# – 在void方法中使用async等待
我有方法签名我不能改变.它应该是
protected override void OnInitialize() 使用Windows 8 Metro API,我需要检查文件是否存在并在该NoSignatureChange方法内读取. protected override void OnInitialize() { ... try { var file = folder.OpenFile(fileName); fileExists=true; } catch(FileNotFoundException) { fileExists=false } } 记住,在Windows 8 API only way to check if file exists is handling FileNotFoundException 所以,问题是:如何在Windows 8 API中使用folder.OpenFileAsync方法编写此代码,而不会更改包含方法的签名 解决方法
你仍然可以使一个void方法异步:
protected async void CannotChangeSignature() { ... } 异步方法的有效返回类型有: >无效 但是,如果你想让它实际上被阻止,那么你基本上是与平台进行对抗 – 最重要的是避免阻塞. 你说你不能改变签名 – 但是如果你依靠这个封锁,那么你必须改变编码方式. 理想情况下,您应该将签名更改为Task< bool> ;:: protected async Task<bool> CannotChangeSignature() { ... try { await ApplicationData.Current.LocalFolder.GetFileAsync(fileName); return true; } catch(FileNotFoundException) { return false; } } 编辑:如果你真的需要一个阻止它,你只需要调用AsTask().Wait(),捕获AggregateException并检查它是否包含FileNotFoundException.这真的很可怕,但是你可以不围绕这个设计,这样就不需要阻止了吗?例如,开始检查文件,并显示错误(或任何),如果以及何时发现它不存在. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |