我有一个名为 的方法HandleMessage
,启动了一个新线程来处理消息。如果锁对象被成功获取,则处理它。否则将消息放入队列。ASynchronizationLockException
总是被抛出,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);
}
});
}