我想限制在Dataflow管道中发布的项目数.项目数取决于生产环境.这些对象占用大量内存(图像),因此我想在管道的最后一个块完成其工作时发布它们.
我试图使用a SemaphoreSlim来限制生产者并在管道的最后一个块中释放它.它可以工作,但如果在此过程中引发异常,程序将永远等待,并且不会拦截异常.
这是一个看起来像我们的代码的示例.我怎样才能做到这一点 ?
static void Main(string[] args)
{
SemaphoreSlim semaphore = new SemaphoreSlim(1, 2);
var downloadString = new TransformBlock<string, string>(uri =>
{
Console.WriteLine("Downloading '{0}'...", uri);
return new WebClient().DownloadString(uri);
});
var createWordList = new TransformBlock<string, string[]>(text =>
{
Console.WriteLine("Creating word list...");
char[] tokens = text.ToArray();
for (int i = 0; i < tokens.Length; i++)
{
if (!char.IsLetter(tokens[i]))
tokens[i] = ' ';
}
text = new string(tokens);
return text.Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries);
});
var filterWordList = …Run Code Online (Sandbox Code Playgroud)