در این مقاله، روشی برای ایجاد بازگشت (recursion) در TPL Dataflow با استفاده از محمولههای LinkTo ارائه شده است. این روش، بازگشتی را بدون نیاز به فراخوانیهای متد بازگشتی صریح، تنها از طریق گراف دادهای ایجاد میکند.
ایده اصلی این است که خروجی یک بلاک را از طریق یک محموله به ورودی همان بلاک متصل کنیم. پیامهایی که شرط "بازگشت" را برآورده میکنند، دوباره به بلاک باز میگردند، در حالی که پیامهایی که شرط "حالت پایه" را برآورده میکنند، به جلو حرکت میکنند. زمان اجرای Dataflow، تکرار را برای ما مدیریت میکند.
به عنوان مثال، پیمایش یک درخت دایرکتوری و محاسبه هش MD5 برای هر فایل در آن دایرکتوری، میتواند با استفاده از این روش انجام شود. دایرکتوریها باید گسترش یابند (به صورت بازگشتی پیمایش شوند)، در حالی که فایلها باید پردازش (هشگذاری) شوند.
گراف دادهای شامل یک TransformManyBlock است که قلب بازگشت را تشکیل میدهد. این بلاک، هنگام دریافت یک مسیر پوشه، تمام ورودیهای داخل آن پوشه را برمیگرداند. هر ورودی سپس توسط یک محموله مسیریابی میشود: پوشهها به همان بلاک باز میگردند و فایلها به مرحله هشگذاری منتقل میشوند.
مزیت این روش نسبت به استفاده از یک متد بازگشتی ساده، بهرهمندی از موازیسازی خودکار و پشتیبانی داخلی از کنترل فشار (backpressure) است. این رویکرد همچنین خط لوله را مسطح نگه میدارد، صرف نظر از عمق درخت دایرکتوری.
مشاهده مطلب اصلی