none
文件读写卡死问题 RRS feed

  • 问题

  • async private Task<String> CreateFileClass(String name)
            {
                String text = "";
                try
                {
                    StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("MyFolder");
                    IAsyncOperation<StorageFile> fileTask = folder.GetFileAsync("test.txt");
                    m_file = await fileTask;
                    if (m_file != null)
                    {
                        IAsyncOperation<String> tResult = FileIO.ReadTextAsync(m_file);
                        text = await tResult;
                    }
                    else
                        text = "失败";
                }
                catch (Exception err)
                {
                    text = err.Message;
                    Debug.WriteLine(err.StackTrace);
                }
                finally
                {
                }
                return text;
            }
    在以上代码中F5执行常常会在第二或者第三个Await里面卡死,但是如果是单步调试程序又可以执行。不太懂里面机制,求解释

    2014年2月27日 17:53

全部回复

  • Hi ZhangAndKnight,

    你指的第二个或者第三个Await是下面这两行么?不过我不理解你说的卡死是什么意思,是报错还是不执行下去。

    IAsyncOperation<StorageFile> fileTask = folder.GetFileAsync("test.txt");
    m_file = await fileTask;

    关于Async和Await的机制请参考:使用 Async 和 Await 的异步编程(C# 和 Visual Basic)

    不过我看你的代码似乎没有问题,同时在我本地也测试过你的代码,似乎没有问题。。。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年2月28日 2:51
    版主
  • 线程一直等待,没有返回结果
    2014年2月28日 2:59
  • 如果单独测试这段代码的话是不会存在问题,所以我想请你提供一个可以重现问题的Demo让我们测试一下。

    听你的说法似乎造成了死锁,导致程序等待,不给返回结果,但是光从这一段代码来看,似乎没有可以造死锁的条件。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年2月28日 8:44
    版主
  • 我的也出现卡死了。

                try
                {
                    StorageFile File = await roamingFolder.GetFileAsync(FilePath);
                    return await FileIO.ReadTextAsync(File);
                }
                catch
                {
                    return null;
                }

    FileIO.ReadTextAsync(File)这个会卡死。我的系统WIN8.1

    2014年6月27日 15:55
  • 你好 柯小南,

    可以把整个项目(或者可以重现问题的Demo)都发给我让我测试么?单纯从代码片段判断不出来问题在哪里。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年6月28日 2:51
    版主
  • 只能给你这个文件的,其实和官方DEMO没什么不同。

        public class RoamingFileAccess
        {
            public string FilePath { get; set; }
            Windows.Storage.StorageFolder roamingFolder;
            public RoamingFileAccess()
            {
                roamingFolder = ApplicationData.Current.RoamingFolder;
            }
            async void Save(string content)
            {

                StorageFile sampleFile = await roamingFolder.CreateFileAsync(FilePath, CreationCollisionOption.ReplaceExisting);
                await FileIO.WriteTextAsync(sampleFile, content);
            }

            // Read data from a file

            async Task<string> Load()
            {
                try
                {
                    StorageFile sampleFile = await roamingFolder.GetFileAsync(FilePath);
                    return await FileIO.ReadTextAsync(sampleFile);
                }
                catch
                {
                    return null;
                }
            }
        }

    2014年7月14日 10:30
  • 你好,不好意思,我这里还是没法重现。

    我用了你提供的代码,然后自己添加了如下代码去运行,可以顺利执行完毕。

            public MainPage()
            {
                this.InitializeComponent();
                dosomething();
            }
    
            public async void dosomething()
            {
                RoamingFileAccess fileSaver = new RoamingFileAccess();
                fileSaver.FilePath = "myfile";
                fileSaver.Save("test");
    
                string mysave = await fileSaver.Load();
            }

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年7月16日 7:02
    版主
  • 你可以试着对这个文件进行多次读写,看是不是会卡住
    2014年8月7日 2:02