Tul*_*ika 0 c# async-await win-universal-app uwp
我正在读取一个文件,该文件存在于通用窗口应用程序范围中,从一个外部项目添加为.dll到第一个.代码似乎在GetFileAsync中卡住或挂起.此外,当我从应用程序而不是.dll项目运行相同的存根时,它可以工作.我需要知道是否有一种不同的方法从.dll项目中读取Application文件夹中的文件,以便在同一个项目中使用.读取文件的代码:
private static async Task<Stream> getStreamAsync()
{
try
{
StorageFolder storageFolder = Package.Current.InstalledLocation;
StorageFile file = await storageFolder.GetFileAsync("file.json");
Stream stream = null;
if (file != null)
{
var randomAccessStream = await file.OpenReadAsync().AsTask().ConfigureAwait(false);
stream = randomAccessStream.AsStreamForRead();
}
return stream;
}
catch (Exception ex)
{ }
}
private Stream fetchStream()
{
var stream = getStreamAsync().Result;
return stream;
}
private func()
{
Stream StreamFetched = fetchStream();
}
Run Code Online (Sandbox Code Playgroud)
你自己的UI线程陷入僵局:
fetchStream
电话getStreamAsync()
.
getStreamAsync()
等待storageFolder.GetFileAsync,将连续调度安排到当前同步上下文(UI线程的消息队列).UI线程立即返回getStreamAsync()
并继续执行fetchStream()
.执行.Result
阻止UI线程等待继续完成的块.
......但是
延续将永远不会完成,因为延迟计划在UI线程上稍后运行并且UI线程被阻止.
尝试类似的东西:
StorageFile file = await storageFolder.GetFileAsync("file.json").ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)
这将导致继续根据默认同步上下文而不是当前上下文进行调度.这(大概)是为什么你还要ConfigureAwait(false)
进一步下降OpenReadAsync()
归档时间: |
|
查看次数: |
461 次 |
最近记录: |