은 가정하자 나는이 같은 MEF 구성이 : 내가 본 문서에 따르면MEF 재구성 - 기존 인스턴스를 유지합니까?
public class Composition
{
[ImportMany(AllowRecomposition = true)]
IEnumerable<ILongRunningProcess> Processes { get; set; }
public static void Main(string[] args)
{
var composition = new Composition();
using (var catalog = new DirectoryCatalog("."))
{
using (var container = new CompositionContainer(catalog)
{
container.SatisfyImportsOnce(composition);
//Fire off long running processes in response to stimuli
}
}
}
}
을, 나는 "재구성을 사용할 때 스레드 안전성을 고려해야합니다."[MSDN]를위한 분명히
내가 유형을 제거한 경우, 장기 실행 프로세스가 가비지 수집이 안전하게 이루어질 수 있도록해야합니다. 그러나 재구성 전에 존재하고 재구성 후에 여전히 존재하는 유형의 경우 재구성이 발생할 때마다 Processes
의 내용에 대한 새 인스턴스를 다시 가져 오거나 카탈로그 재구성시 기존의 인스턴스를 보존 할 수 있습니까? ICollection<T>
위해 MEF는 Clear()
및 Add(T)
방법을 사용하는 위의 문서의 제안을 바탕으로
, 나는 희망 아니지만, 내가 동기화 코드를 작성 가기 전에 확실히 알고 싶습니다.
EDIT 나는 방금 정적 방법으로 this
을 사용할 수 없다는 것을 알았습니다. 그에 따라 코드를 업데이트했습니다.
"스레드 세이프 (thread-safe)"라는 용어는 이러한 프로세스를 결정 론적으로 중지시켜 다음 인스턴스에서 해당 프로세스를 다시 시작할 수있는 방법을 제공하고자합니다. 카탈로그가 변경 될 때 실행되는 수에는 제한이 없으며 해당 작업을 "재개 가능"해야합니다. 고전적인 정의에 맞지 않는다고 생각합니다. 나는 더 나은 질문 제목을 생각해 내도록 노력할 것이다. – arootbeer