【发布时间】:2012-10-08 03:25:04
【问题描述】:
我有一个名为HandleMessage 的方法,启动了一个新线程来处理消息。如果锁对象被成功获取,则处理它。否则将消息放入队列。 SynchronizationLockException 总是被抛出 Monitor.Exit(o),因为在 await 之后,上下文不再在原始线程中。正确的实现方式是什么?
public void HandleMessage(string message)
{
Task.Factory.StartNew(async delegate
{
if (Monitor.TryEnter(o))
{
try
{
do
{
await HandleMessageAsync(message);
}
while (queue.TryDequeue(out message));
}
finally
{
Monitor.Exit(o);
}
}
else
{
queue.Enqueue(message);
}
});
}
【问题讨论】:
-
副手,似乎 TPL 数据流更合适,因为您的 HandleMessage 可以只发布到块而不是包含此逻辑?
标签: c# multithreading windows-8 async-await