ٹاسک ریٹینشن

پہلے سے طے شدہ ہے کہ اگر Handler (یعنی Handler.ProcessTask) کامیابی سے ایک ٹاسک کو پراکرت کرتا ہے تو ٹاسک کو قطار سے ہٹا دیا جائے گا۔ البتہ، اگر آپ چاہتے ہیں کہ ٹاسک مکمل ہونے کے بعد بھی قطار میں ریٹین رہے (مثال کے طور پر، معائنہ کے مقاصد کے لئے)، تو آپ ٹاسک کے لئے ایک ریٹینشن مدت کا تعین کر سکتے ہیں۔

نیچے ایک مثال ہے جس میں Retention اختیار کا استعمال کرکے ذيل کیا گیا ہے کہ ٹاسک کو مکمل ہونے کے بعد 24 گھنٹے کے لئے قطار میں رکھا جائے۔

// ٹاسک کے ابتدائی کرنے کے وقت اختیارات کو تعین کرنا۔
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))

// یا تو، تسک قطار میں ڈالتے وقت اختیارات کو تعین کرنا۔
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

اس اختیار کو تعین کرنے کے بعد آپ کو CLI یا ویب UI استعمال کرکے مکمل ہونے والے ٹاسکس دیکھنے کی اجازت ہونی چاہئے۔

ٹاسک کے نتائج

اگر آپ کو ٹاسک کے دوران کچھ ڈیٹا ذاتی کرلینا ہو، اور اگر یہ ڈیٹا صرف ٹاسک کے دوران کی زندگی کے دوران درکار ہو (یعنی، جب تک ٹاسک قطار سے ہٹایا نہ جائے)، تو آپ کام کے دوران ٹاسک کے ساتھ ڈیٹا کو رکھ سکتے ہیں۔

ResultWriter کا استعمال کریں ریڈس میں ڈیٹا لکھنے اور لکھے گئے ڈیٹا کو ٹاسک کے ساتھ منسلک کرنے کے لئے۔

نوٹ: براہ کرم ریڈس میں لکھنے والے ڈیٹا کی مقدار کو غور سے کریں۔ اگر بڑی مقدار میں ڈیٹا ذخیرہ کرنا ہو تو، بہتر ہوگا کہ آپ ایک ڈسک-بیسڈ اسٹوریج سسٹم جیسے ایک ایس کیوایل ڈیٹا بیس کا استعمال کریں۔

// ہینڈلر کوڈ میں۔
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 اختیار کا استعمال کریں جیسا کہ اوپر دکھایا گیا ہے، تو آپ کو CLI اور ویب UI کے ذریعے نتائج کے ڈیٹا دیکھنے کی اجازت ہوگی۔ علاوہ ازیں، آپ کو Inspector.GetTaskInfo اور Inspector.ListCompletedTasks کے استعمال سے نتائج کے ڈیٹا تک رسائی حاصل ہوگی۔