这个问题是关于线程安全和异步编程的。我想知道我的最终解决方案是否正常。
我有一个类似于此的线程安全类:
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));
}
我的代码是否正确?
答案 0 :(得分:2)
如果通过threadsafe,则表示只能执行一个线程
logger.Log(s);
在任何时候,然后是的,这是线程安全的。
无论是否异步调用Log方法,lock语句都可以确保这一点。