5
나는 파일 작성 이벤트를 모니터하고, 파일 내용에서 일부 오브젝트를 작성하며, 일부 처리를 수행하는 간단한 어플리케이션을 작성했습니다. 다음은 샘플 코드이다 : 그것은 모두 잘 작동PLINQ와 BlockingCollection의 공동 작업
class Program
{
private const string Folder = "C:\\Temp\\InputData";
static void Main(string[] args)
{
var cts = new CancellationTokenSource();
foreach (var obj in Input(cts.Token))
Console.WriteLine(obj);
}
public static IEnumerable<object> Input(CancellationToken cancellationToken)
{
var fileList = new BlockingCollection<string>();
var watcher = new FileSystemWatcher(Folder);
watcher.Created += (source, e) =>
{
if (cancellationToken.IsCancellationRequested)
watcher.EnableRaisingEvents = false;
else if (Path.GetFileName(e.FullPath) == "STOP")
{
watcher.EnableRaisingEvents = false;
fileList.CompleteAdding();
File.Delete(e.FullPath);
}
else
fileList.Add(e.FullPath);
};
watcher.EnableRaisingEvents = true;
return from file in
fileList.GetConsumingEnumerable(cancellationToken)
//.AsParallel()
//.WithCancellation(cancellationToken)
//.WithDegreeOfParallelism(5)
let obj = CreateMyObject(file)
select obj;
}
private static object CreateMyObject(string file)
{
return file;
}
}
은,하지만 난 AsParallel (그리고 다음 두 줄)의 주석을 해제 할 때 즉시 결과를 얻을하지 않습니다. 이 지연은 PLINQ 파티셔닝에 의한 것입니까? 그러나이 쿼리는 BlockingCollection에 추가되는 즉시 항목을 생성 할 것으로 예상됩니다. PLINQ를 사용하여이를 달성 할 수 있습니까?
이것은 완벽하게 작동했습니다. 많은 감사합니다! – yuramag