【发布时间】:2012-06-23 17:47:11
【问题描述】:
我有以下程序可以将文件从一个目录移动到另一个目录。以同步的方式,它工作得很好。但我想以异步的方式来做。
谢谢
【问题讨论】:
标签: c# async-await c#-5.0
我有以下程序可以将文件从一个目录移动到另一个目录。以同步的方式,它工作得很好。但我想以异步的方式来做。
谢谢
【问题讨论】:
标签: c# async-await c#-5.0
错误说明了一切:你不能await 是void。你只能awaitTasks 和看起来类似于Tasks 的东西(例如YieldAwaitable,由Task.Yield() 返回)。但是你肯定不能awaitvoid。
似乎没有办法在 .Net 4.5 中异步移动文件。
您可以做的最好的事情是使用await Task.Run(() => fileinfo.MoveTo(target)) 之类的东西,它仍然会阻塞线程,但不会阻塞当前线程(如果您在 UI 线程上可能会很有用)。
或者,您也可以使用Streams(可以是异步的)自己复制文件,然后删除原始文件。
【讨论】:
Task 完成之前调用了 Wait() 或 Result)。
只有当你调用的方法支持时,你才能使用 await。
要支持await,该方法需要返回一个Task<T>
在这种情况下,fileInfo.MoveTo 不会返回 Task
【讨论】:
await 不是Tasks 的东西。参见例如Task.Yield() 不返回 Task,但仍然可以是 awaited。