मैंने एक सरल एप्लिकेशन रखा है जो फ़ाइल निर्माण ईवेंट पर नज़र रखता है, फाइल सामग्री से कुछ ऑब्जेक्ट बनाता है, और कुछ प्रोसेसिंग करता है। यहाँ नमूना कोड है: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 (और अगले दो लाइनों) uncomment यह परिणाम नहीं करता है अभी। यह विलंब शायद PLINQ विभाजन के कारण होता है? हालांकि, मैं उम्मीद करता हूं कि इस क्वेरी को ब्लॉकिंग कोलेक्शन में जोड़े जाने के तुरंत बाद आइटम मिलेंगे। क्या PLINQ का उपयोग करना संभव है?
यह पूरी तरह से अच्छी तरह से काम किया। बहुत धन्यवाद! – yuramag