C# Windows Phone定期任务同步异步方法

C# Windows Phone定期任务同步异步方法,c#,asynchronous,windows-phone-8,C#,Asynchronous,Windows Phone 8,我正在尝试在Windows Phone 8应用程序上使用定期后台任务。我想使用xml文件序列化前台应用程序和后台任务之间的状态信息 我读到您应该使用互斥来同步对文件的访问。但是,我在使用它时遇到了问题,因为我需要在使用互斥体的方法中调用wait(将数据读写到文件)。这会导致我的应用程序在调用Mutex.Release时锁定,因为它是在不同的线程上发布的。你知道怎么处理吗 public async Task WriteState(BackgroundTaskState state)

我正在尝试在Windows Phone 8应用程序上使用定期后台任务。我想使用xml文件序列化前台应用程序和后台任务之间的状态信息

我读到您应该使用互斥来同步对文件的访问。但是,我在使用它时遇到了问题,因为我需要在使用互斥体的方法中调用wait(将数据读写到文件)。这会导致我的应用程序在调用Mutex.Release时锁定,因为它是在不同的线程上发布的。你知道怎么处理吗

    public async Task WriteState(BackgroundTaskState state)
    {            
        using (var m = new Mutex(false, BackgroundTaskState.MutexName))
        {

            try
            {
                m.WaitOne();

                using (var stream = await GetFileStreamForWriting())
                {
                    XmlSerializer xmlSerializer = new XmlSerializer(typeof(BackgroundTaskState));
                    xmlSerializer.Serialize(stream, state);
                    await stream.FlushAsync();
                }
            }
            catch (Exception)
            {

            }
            finally
            {
                m.ReleaseMutex();
            }
        }
    }

Mutex
只能由获取它的同一线程释放,因此不能与
wait
一起使用。您可以使用来实现相同的结果,因为它们不受特定线程的限制

semaphore.WaitOne();
await Task.Delay(2); // Your async call
semaphore.Release();

当包装在using中时,无需调用FlushAsync。已在Dispose方法中调用Flush。在你的WP应用程序中,哪里有一个方便的文件可以使用?即使我没有使用FushAsync,我仍然需要调用Wait GetFileStreamForWriting()来获取文件流。你呢?检查我建议的文件是的,我检查了文件。问题是我需要使用StorageFile类而不是IsolatedStorageFile,因为我计划在WinRT上也使用代码。