حفظ وظیفه

به طور پیش‌فرض، یکباری که یک وظیفه با موفقیت توسط Handler پردازش شود (به عبارت دیگر، Handler.ProcessTask مقدار nil برگرداند)، وظیفه از صف حذف خواهد شد. با این حال، اگر می‌خواهید وظیفه پس از اتمام (برای مثال، برای اغراق نمایشی) در صف نگهداری شود، می‌توانید یک دوره نگهداری برای وظیفه مشخص کنید.

در زیر مثالی از استفاده از گزینه Retention برای مشخص کردن اینکه یک وظیفه باید برای 24 ساعت پس از انجام در صف نگهداری شود، آمده است.

// تنظیم گزینه هنگام مقداردهی اولیه وظیفه.
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))

// به طور جایگزین، تنظیم گزینه هنگام قرار دادن وظیفه در صف.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

بعد از تنظیم این گزینه، می‌توانید وظایف انجام شده را از طریق رابط خط فرمان یا رابط کاربری وب مشاهده کنید.

نتیجه وظیفه

اگر به دنبال ذخیره‌سازی برخی از داده‌های مرتبط با وظیفه در حین پردازش وظیفه هستید و اگر این داده‌ها تنها در طول دوره عمر وظیفه مورد نیاز است (به عبارت دیگر، تا زمانی که وظیفه از صف حذف می‌شود)، می‌توانید داده‌ها را همراه با وظیفه ذخیره کنید.

استفاده از ResultWriter برای نوشتن داده به ردیس و همبسته‌سازی داده نوشته شده با وظیفه.

توجه: لطفاً میزان داده‌ای که به ردیس نوشته می‌شود را با دقت در نظر بگیرید. اگر مقدار زیادی داده باید ذخیره شود، بهتر است از یک سیستم ذخیره‌سازی مبتنی بر دیسک مانند پایگاه داده SQL استفاده کنید.

// در کد هندلر.
func MyHandler(ctx context.Context, task *asynq.Task) error {
    res, err := DoStuff(ctx, task)
    if err != nil {
        return fmt.Errorf("failed to process task: %v", err)
    }
    if _, err := task.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("failed to write task result: %v", err)
    }
    return nil
}

اگر گزینه Retention را مانند مثال بالا استفاده کنید، خواهید توانست داده نتایج را از طریق رابط خط فرمان و رابط کاربری وب مشاهده کنید. به علاوه، می‌توانید به صورت برنامه‌ریزی‌شده از طریق استفاده از Inspector.GetTaskInfo و Inspector.ListCompletedTasks به داده نتایج دسترسی داشته باشید.