这个问题是关于线程安全和异步编程的。我想知道我的最终解决方案是否正确。
我有一个线程安全的类,看起来像这样:
public class SafeLogger
{
public static SafeLogger Instance = new SafeLogger();
private object lock;
private UnsafeLogger logger;
private SafeLogger()
{
logger = new UnsafeLogger();
}
public void Log(string s)
{
lock (lock)
{
logger.Log(s);
}
}
}
如果我在我的类中添加一个异步方法:
public async void LogAsync(string s)
{
await Task.Run(() => Log(s));
}
我的代码正确吗?
如果通过线程安全,你的意思是一个线程能够执行
logger.Log(s);
在任何时候,那么是的,这是线程安全的。
无论是否异步调用 Log 方法,lock 语句都会确保这一点。