C#:使用'锁定'的异步方法指令

时间:2017-04-11 23:52:50

标签: c# asynchronous thread-safety locking

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

我有一个类似于此的线程安全类:

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));
   }

我的代码是否正确?

1 个答案:

答案 0 :(得分:2)

如果通过threadsafe,则表示只能执行一个线程

logger.Log(s);

在任何时候,然后是的,这是线程安全的。

无论是否异步调用Log方法,lock语句都可以确保这一点。