运行多线程时会话范围是否安全?我有一个单例服务(多线程),它的方法如下所示:
public void GetMessage()
{
{
using var session = _connection.CreateSession(true, AcknowledgeMode.SessionTransacted);
using var destination = session.CreateQueue(_queueName);
using var consumer = session.CreateConsumer(destination);
var msg = consumer.ReceiveNoWait();
// Handles message here
msg.Commit();
}
}
在我看来,每次调用该方法都会创建自己的会话范围,该会话范围彼此并行运行。
另一方面,如果两个线程彼此靠近运行,那么当创建一个会话时,另一个会话将在该会话内创建。
这种方法多线程“安全”吗?或者我需要在这种情况下使用锁吗?
private readonly object _lock = new();
public void GetMessage()
{
lock(_lock)
{
using var session = _connection.CreateSession(true, AcknowledgeMode.SessionTransacted);
using var destination = session.CreateQueue(_queueName);
using var consumer = session.CreateConsumer(destination);
var msg = consumer.ReceiveNoWait();
// Handles message here
msg.Commit();
}
}