【发布时间】:2015-11-15 17:55:00
【问题描述】:
注意:我在 Unity 中使用 C#,这意味着版本 .NET 3.5,所以我不能使用 await 或 async 关键字..
当我将一个异步工作的方法放入其中时,using 语句会发生什么?
using (WebClient wc = new WebClient()) {
wc.DownloadFileAsync(urlUri, outputFile);
}
SomeMethod1();
SomeMethod2();
如您所知,在调用 DownloadFileAsync() 方法后,将调用位于 using 块之外的 SomeMethod1(),而 DownloadFileAsync() 仍在工作。所以现在我真的很困惑在这种情况下使用语句和异步方法会发生什么。
Dispose() 或 wc 会在正确的时间被调用而没有任何问题吗?
如果不是,我该如何纠正这个例子?
【问题讨论】:
-
这行不通。使用
await和*TaskAsync -
@JasonEvans,你为什么说是?由于OP没有使用
await,那么就有问题了。 -
非常感谢您的回复,我犯了好几次这种愚蠢的错误。那我该如何避免呢?只需添加 await 关键字?
-
由于 OP 没有使用返回
Task的异步方法,因此 Mjolnir 的副本不太有用。副本的 OP 是偶然的,因为他们不知道他们只需要在他们的方法中使用 async/await。致@JenixGuy,如果您能够使用WebClient.DownloadFileTaskAsync(),您可以使用副本中建议的内容。 -
Just add await keyword如果你知道 await 做了什么,答案对你来说是显而易见的。当您不确定它们的作用时,不要在代码中添加关键字。
标签: c# asynchronous unity3d .net-3.5 using