【发布时间】:2018-08-12 16:49:53
【问题描述】:
我在开发 UWP 应用和使用 await/async 方面非常陌生。我尝试从 UWP 应用程序的本地文件夹中获取文件,但该应用程序挂起。该文件存在于驱动器上。
我写了一些测试方法来尝试找出问题,但我不明白,为什么它不起作用。两次运行正常,第三次总是挂起。
有人知道我在做什么吗?
代码:
public void Test()
{
for (var i = 0; i < 10; i++)
{
KLogger.Log.Debug("");
KLogger.Log.Debug("### Started : " + i);
// create new or returns existent file
var task = TestGetNewFile("test.txt");
//task.ConfigureAwait(false);
task.Wait();
var res = task.Result;
task.Dispose();
KLogger.Log.Debug("### Done : " + i);
}
}
public async Task<IStorageFile> TestGetNewFile(string fileName)
{
var storageFolder = ApplicationData.Current.LocalFolder;
KLogger.Log.Debug("Creation started.");
var fileItem = await storageFolder.TryGetItemAsync(fileName);
KLogger.Log.Debug("Creation finished.");
return null;
}
日志输出:
2018-08-12 00:41:07.282 +02:00 [DBG]
2018-08-12 00:41:07.282 +02:00 [DBG] ### Started : 0
2018-08-12 00:41:07.284 +02:00 [DBG] Creation started.
2018-08-12 00:41:07.289 +02:00 [DBG] Creation finished.
2018-08-12 00:41:07.289 +02:00 [DBG] ### Done : 0
2018-08-12 00:41:07.289 +02:00 [DBG]
2018-08-12 00:41:07.289 +02:00 [DBG] ### Started : 1
2018-08-12 00:41:07.289 +02:00 [DBG] Creation started.
2018-08-12 00:41:07.300 +02:00 [DBG] Creation finished.
2018-08-12 00:41:07.300 +02:00 [DBG] ### Done : 1
2018-08-12 00:41:07.300 +02:00 [DBG]
2018-08-12 00:41:07.300 +02:00 [DBG] ### Started : 2
2018-08-12 00:41:07.300 +02:00 [DBG] Creation started.
-- nothing more in log file --
【问题讨论】:
-
您的代码无法编译。 Task 类中没有 Dispose 方法。
-
// 组装位置:C:\Users\user\.nuget\packages\microsoft.netcore.universalwindowsplatform\6.1.5\ref\uap10.0.15138\System.Runtime.dll - 任务有一个处置方法。但是您可以删除 Dispose 调用。这只是一个测试。没有处理,问题是一样的。UWP 应用程序适用于目标平台 Windows 10,版本 1803 (10.0; Build 17134) 最小。版本 Windows 10 Fall Creators Update (10.0; Build 16xxx)
-
如果您从 UI 线程调用此代码,那么令人惊讶的是它在前两次工作,这是一种已知的死锁模式。尝试像这样调用您的方法:
var task = Task.Run(() => TestGetNewFile("test.txt"));
标签: c# file uwp async-await