C#:具有"锁定"指令的异步方法



这个问题是关于线程安全和异步编程的。我想知道我的最终解决方案是否正确。

我有一个线程安全的类,看起来像这样:

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 语句都会确保这一点。

最新更新