UWP C#TryGetItemAsync-调用第三次挂起
我在开发UWP应用程序和使用await/async方面是个新手。我尝试从UWP应用程序的本地文件夹获取文件,但该应用程序挂起。该文件存在于驱动器上 我写了一些测试方法来尝试识别问题,但我不明白为什么它不起作用。两次运行正常,第三次始终挂起 有人知道我在做什么吗 代码:UWP C#TryGetItemAsync-调用第三次挂起,c#,file,uwp,async-await,C#,File,Uwp,Async Await,我在开发UWP应用程序和使用await/async方面是个新手。我尝试从UWP应用程序的本地文件夹获取文件,但该应用程序挂起。该文件存在于驱动器上 我写了一些测试方法来尝试识别问题,但我不明白为什么它不起作用。两次运行正常,第三次始终挂起 有人知道我在做什么吗 代码: public void Test() { for (var i = 0; i < 10; i++) { KLogger.Log.Debug("");
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 --
如果您这样调用它,则可以一直使用
async wait
private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 10; i++)
{
var item = await TestGetNewFile("test.txt");
}
}
async Task<IStorageItem> TestGetNewFile(string fileName)
{
return await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
}
private async void MainPage\u已加载(对象发送方,RoutedEventArgs e)
{
对于(int i=0;i<10;i++)
{
var item=wait TestGetNewFile(“test.txt”);
}
}
异步任务TestGetNewFile(字符串文件名)
{
返回await ApplicationData.Current.LocalFolder.TryGetItemAsync(文件名);
}
您可能会发现这个答案很有用。您的代码无法编译。任务类中没有Dispose方法//程序集位置:C:\Users\user\.nuget\packages\microsoft.netcore.universalwindowsplatform\6.1.5\ref\uap10.0.15138\System.Runtime.dll-任务具有Dispose方法。但您可以删除Dispose调用。这只是一次测试。如果没有dispose,问题是相同的。UWP应用程序适用于目标平台Windows 10,版本1803(10.0;构建17134)分钟。版本Windows 10 Fall Creators更新(10.0;构建16xxx)如果您是从UI线程调用此代码,那么令人惊讶的是它在前两次工作,这是一种已知的死锁模式。试着像这样调用您的方法:
var task=task.Run(()=>TestGetNewFile(“test.txt”)嘿!伟大的这在“异步一直等待”的情况下工作得非常完美。非常感谢您的快速帮助!