یک مشتری در حال استفاده از کلاس task_sequencer v2 بود که ما مدتی پیش توسعه دادیم. آنها متوجه شدند که گاهی اوقات دچار خرابیهای ناشی از سرریز پشته میشوند. ریشه مشکل در این است که اگر توالی از وظایف وجود داشته باشد که همگی به صورت همزمان به پایان برسند، این مشکل رخ میدهد.
برای رفع این مشکل، میتوان یک co_await winrt::resume_background() را به lambda بعد از co_await suspend اضافه کرد. این کار باعث میشود که coroutine روی پشته جدید یک threadpool thread از سر گرفته شود و thread قبلی آزاد شود تا بتواند unwind شود.
این راه حل باعث مصرف یک threadpool thread میشود، اما از سرریز پشته جلوگیری میکند.
مشاهده مطلب اصلی