我试图在Windows Phone 8应用程序上使用Periodic Background Task。我想使用xml文件来序列化前台应用程序和后台任务之间的状态信息。
我读过您应该使用Mutex来同步对文件的访问。但是,我遇到了使用它的问题,因为我需要在我使用Mutex的方法中调用await(读取和写入文件的数据)。这会导致我的应用程序在我调用Mutex时锁定。因为它是在不同的线程上发布的。任何想法如何处理这个?
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();
}
}
}
答案 0 :(得分:1)
Mutex
只能由获取它的同一个线程释放,因此您无法将其与await
一起使用。您可以使用Semaphore
来获得相同的结果,因为它们不受特定线程的约束。
semaphore.WaitOne();
await Task.Delay(2); // Your async call
semaphore.Release();