当前位置:  开发笔记 > 编程语言 > 正文

存储文件上的OpenReadAsync调用挂起

如何解决《存储文件上的OpenReadAsync调用挂起》经验,为你挑选了1个好方法。

我正在读取一个文件,该文件存在于通用窗口应用程序范围中,从一个外部项目添加为.dll到第一个.代码似乎在GetFileAsync中卡住或挂起.此外,当我从应用程序而不是.dll项目运行相同的存根时,它可以工作.我需要知道是否有一种不同的方法从.dll项目中读取Application文件夹中的文件,以便在同一个项目中使用.读取文件的代码:

private static async Task 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();
}

Greg D.. 5

你自己的UI线程陷入僵局:

fetchStream电话getStreamAsync(). getStreamAsync()等待storageFolder.GetFileAsync,将连续调度安排到当前同步上下文(UI线程的消息队列).UI线程立即返回getStreamAsync()并继续执行fetchStream().执行.Result阻止UI线程等待继续完成的块.

......但是

延续将永远不会完成,因为延迟计划在UI线程上稍后运行并且UI线程被阻止.

尝试类似的东西:

StorageFile file = await storageFolder.GetFileAsync("file.json").ConfigureAwait(false);

这将导致继续根据默认同步上下文而不是当前上下文进行调度.这(大概)是为什么你还要ConfigureAwait(false)进一步下降OpenReadAsync()



1> Greg D..:

你自己的UI线程陷入僵局:

fetchStream电话getStreamAsync(). getStreamAsync()等待storageFolder.GetFileAsync,将连续调度安排到当前同步上下文(UI线程的消息队列).UI线程立即返回getStreamAsync()并继续执行fetchStream().执行.Result阻止UI线程等待继续完成的块.

......但是

延续将永远不会完成,因为延迟计划在UI线程上稍后运行并且UI线程被阻止.

尝试类似的东西:

StorageFile file = await storageFolder.GetFileAsync("file.json").ConfigureAwait(false);

这将导致继续根据默认同步上下文而不是当前上下文进行调度.这(大概)是为什么你还要ConfigureAwait(false)进一步下降OpenReadAsync()


`.Result`没有安排任何事情.它_blocks execution_.您在UI线程上阻止了执行,因此您的UI线程无法再处理其消息队列.我不知道为什么它在其他环境中起作用(或似乎起作用),没有足够的信息.
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有