0
이 질문은 스레드 안전성과 비동기 프로그래밍에 대한 것입니다. 내 최종 솔루션이 괜찮은지 알고 싶습니다. 내 클래스에 비동기 방식을 추가하는 경우C# : 'lock'명령어로 비동기 메서드
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);
을 실행할 수 있습니다 의미하는 경우
코드 검토 질문은 코드 검토 SE에서 더 많은 주제를 다룹니다. 그것은 코드 리뷰처럼 기본적으로 당신이 요구하는 것 같습니다, 맞습니까? – BradleyDotNET
[ "스레드 안전이라고하는 것은 무엇입니까?]] (https://blogs.msdn.microsoft.com/ericlippert/2009/10/19/what-is-this-thing-you-call-thread- 안전한 /). 당신의 클래스가 문맥없이 스레드로부터 안전하다는 주장을 확인하는 것은 불가능합니다. "스레드 안전"이란 무엇을 의미합니까? 당신은 어떤 구체적인 기준을 충족하려고합니까? (async void method가 아닌) 게시 한 코드에 분명히 틀린 점이있는 것 같지만 거기에는 코드가별로 없습니다. 왜 당신이 어떻게 await를 사용 하는지를 알기에는 충분하지 않습니다. –
참고 [이게 뭐니 뭐니해도 "스레드 세이프 (Thread Safe)"[어쨌든?] (http://www.grumpydev.com/2010/02/26/so-what-is-this-thread-safe-thing) -anyway /) –