C# CreateFileAsync()停止调试,并且从未返回

C# CreateFileAsync()停止调试,并且从未返回,c#,.net,C#,.net,现在,我正在尝试使用C#使用VS2017制作UWP应用程序。我使用CreateFileAsync(fileName,CreationCollisionOption.OpenIfExists)在初始时间创建两个文件,然后打开它们。但是,它在打开第二个文件时停止了(F5、F10、F11按钮在调试期间不工作)。它在创建文件或打开第一个文件时运行。这是我的密码 public static StorageFile GetDataFileFromLocalFolder(string fileName)

现在,我正在尝试使用C#使用VS2017制作UWP应用程序。我使用
CreateFileAsync(fileName,CreationCollisionOption.OpenIfExists)
在初始时间创建两个文件,然后打开它们。但是,它在打开第二个文件时停止了(F5、F10、F11按钮在调试期间不工作)。它在创建文件或打开第一个文件时运行。这是我的密码

public static StorageFile GetDataFileFromLocalFolder(string fileName)
    {
        if (string.IsNullOrEmpty(fileName))
        {
            throw new ArgumentNullException("fileName missing");
        }

        return GetDataFileFromLocalFolderAsync(fileName).Result;
    }

    private static async Task<StorageFile> GetDataFileFromLocalFolderAsync(string fileName)
    {
        var sFolder = ApplicationData.Current.LocalFolder;
        var sFile = await sFolder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
        return sFile;
    }
publicstaticstoragefile GetDataFileFromLocalFolder(字符串文件名)
{
if(string.IsNullOrEmpty(文件名))
{
抛出新ArgumentNullException(“缺少文件名”);
}
返回GetDataFileFromLocalFolderAsync(文件名).Result;
}
私有静态异步任务GetDataFileFromLocalFolderAsync(字符串文件名)
{
var sFolder=ApplicationData.Current.LocalFolder;
var sFile=await sFolder.CreateFileAsync(文件名,CreationCollisionOption.OpenIfExists);
返回sFile;
}

有什么问题吗?不应该使用OpenIfExist选项吗?

我将此问题作为避免
wait
关键字来解决

public static async Task<StorageFile> GetDataFileFromLocalFolderAsync(string fileName)
    {
        if (string.IsNullOrEmpty(fileName))
        {
            throw new ArgumentNullException("fileName missing"); //remove hard coded string here
        }

        var sFolder = ApplicationData.Current.LocalFolder;
        var sFileTask = sFolder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
        var sFile = sFileTask.AsTask().Result;

        return sFile;
    }
公共静态异步任务GetDataFileFromLocalFolderAsync(字符串文件名)
{
if(string.IsNullOrEmpty(文件名))
{
抛出新ArgumentNullException(“缺少文件名”);//在此处删除硬编码字符串
}
var sFolder=ApplicationData.Current.LocalFolder;
var sFileTask=sFolder.CreateFileAsync(文件名,CreationCollisionOption.OpenIfExists);
var sFile=sFileTask.AsTask().Result;
返回sFile;
}

现在它工作得很好。但是永远不知道为什么……

GetDataFileFromLocalFolder的功能是什么?为什么不使用
GetDataFileFromLocalFolderAsync
函数呢?它可能是死锁,因为您正在使用
.Result
进行阻塞。理想情况下,每个方法都是异步的,但您可能可以通过添加
ConfigureAwait(false)
@Roelant来逃脱(黑客攻击)!!我删除了开销函数“GetDataFileFromLocalFolder”。不,如果不小心,使用
。Result
正是导致非异步方法死锁的原因。我同意qbik。是否需要远离异步代码?通常,正是这样,主线程才不会阻塞:)
StorageFile
GetDataFileFromLocalFolderAsync
返回值之后立即打开以进行读取或写入。所以我希望这个序列是同步的。。。但是没有同步方法(仅在
ApplicationData.Current.LocalFolder
中使用
CreateFileAsync
方法创建文件)@罗兰特