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