我想在这个函数中使用ReaderWriterLock:
static async void ETDGazeDataEvent(ETMWNet.ETGazeDataType pGazeData)
{
StorageFolder ETfolder = ApplicationData.Current.LocalFolder;
StorageFile file = await ETfolder.CreateFileAsync("Log.ETDGazeDataEvent.txt", CreationCollisionOption.OpenIfExists);
String ETAnswer = pGazeData.FrameNum + " Time: " + pGazeData.TimeStamp + " X: " + pGazeData.Left.GazePointPixels.x + " Y: " + pGazeData.Left.GazePointPixels.y + " \r\n";
await Windows.Storage.FileIO.AppendTextAsync(file, ETAnswer);
}此函数每秒调用30次,每次都将数据写入文本文件。我想要添加锁定函数直到它完成的代码,以便每次都写入采样数据。我需要添加哪些代码才能在vs2013 c# xaml上很好地工作?
发布于 2014-12-23 22:49:10
我想添加锁定函数直到它完成的代码,以便每次都写入采样数据。
你真正想要的是有序执行,而不仅仅是互斥。因此,ReaderWriterLock (或任何其他互斥原语)是错误的解决方案。但是,队列可以很好地工作。
周围没有太多支持异步的队列,但TPL Dataflow有一个很好的队列,叫做ActionBlock。你可以这样使用它:
private static readonly ActionBlock<ETMWNet.ETGazeDataType> _queue = new ActionBlock<ETMWNet.ETGazeDataType>(
async pGazeData =>
{
StorageFolder ETfolder = ApplicationData.Current.LocalFolder;
StorageFile file = await ETfolder.CreateFileAsync("Log.ETDGazeDataEvent.txt", CreationCollisionOption.OpenIfExists);
String ETAnswer = pGazeData.FrameNum + " Time: " + pGazeData.TimeStamp + " X: " + pGazeData.Left.GazePointPixels.x + " Y: " + pGazeData.Left.GazePointPixels.y + " \r\n";
await Windows.Storage.FileIO.AppendTextAsync(file, ETAnswer);
});
static void ETDGazeDataEvent(ETMWNet.ETGazeDataType pGazeData)
{
_queue.Post(pGazeData);
}https://stackoverflow.com/questions/27618642
复制相似问题