زمینه ctx
زمینه برای لغو کار و مهلت، که از کار اصلی به کارهای فرعی میرسد.
واردسازی زمینه
زمینه به کارهای طولانی میگوید کی باید دست بکشند: یا کسی آن را لغو کرده، یا مهلتش تمام شده. زمینهها درخت میسازند: از پس زمینه شروع میکنید و هر بار با با لغو، با مهلت یا با موعد فرزند تازهای میسازید.
لغو یک زمینه همهی فرزندانش را هم تمام میکند، ولی پدرش را نه. کار فرعی باید گاهبهگاه تمام شده را بررسی کند یا با انتظار منتظر بماند. هر زمینه را پس از کار با آزادسازی آزاد کنید، فرزندها پیش از پدر.
گونهها
زمینه Context
ساختار زمینه| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| state | state | صحیح۶۴* | وضعیت درونی: لغو شده، موعد و داشتن موعد. |
| parent | parent | زمینه* | زمینهی پدر؛ برای ریشه پوچ. |
| mu | mu | sync.Mutex | قفلی که همهی زمینههای یک درخت شریکاند. |
| cv | cv | sync.CondVar | متغیر شرطی که با لغو بیدار میشود. |
| is_root | is_root | منطقی = نادرست | آیا این زمینه ریشه است. |
واردسازی زمینه
روال ریشه:
پایه := زمینه.پس زمینه()
ک := زمینه.با لغو(پایه)
م := زمینه.با مهلت(ک، ۳۰)
سرچاپ زمینه.تمام شده(م)، "[" + زمینه.خطا(م) + "]"، زمینه.موعد(م) > ۰، زمینه.موعد(پایه)
سرچاپ زمینه.انتظار(م، ۱۰)
سرچاپ زمینه.انتظار(م، ۱۰۰۰)، زمینه.خطا(م)
زمینه.لغو(ک)
سرچاپ زمینه.تمام شده(ک)، زمینه.خطا(ک)، زمینه.تمام شده(پایه)
گذشته := زمینه.با موعد(پایه، ۱)
سرچاپ زمینه.تمام شده(گذشته)، زمینه.خطا(گذشته)
زمینه.آزادسازی(گذشته)
زمینه.آزادسازی(م)
زمینه.آزادسازی(ک)
زمینه.آزادسازی(پایه)
پایانروالها
پس زمینه Background
روال پس زمینه(): زمینهنمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
با لغو WithCancel
روال با لغو(parent: زمینه): زمینهلغو تمام میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
با مهلت WithTimeout
روال با مهلت(parent: زمینه، ms: صحیح۶۴): زمینهms میلیثانیهی دیگر تمام میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
با موعد WithDeadline
روال با موعد(parent: زمینه، at_ms: صحیح۶۴): زمینهat_ms تمام میشود؛ زمان بر حسب میلیثانیه، مثل همگام سازی.اکنون میلی ثانیه.نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
لغو Cancel
روال لغو(c: زمینه)نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
تمام شده IsDone
روال تمام شده(c: زمینه): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
خطا Err
روال خطا(c: زمینه): رشتهcancelled یا deadline exceeded؛ اگر هنوز تمام نشده، رشتهی خالی.نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
موعد Deadline
روال موعد(c: زمینه): صحیح۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
انتظار Wait
روال انتظار(c: زمینه، ms: صحیح۶۴): منطقیms میلیثانیه صبر میکند تا زمینه تمام شود و میگوید تمام شده یا نه.نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam
آزادسازی Free
روال آزادسازی(c: زمینه)نمونهی این مورد همراه با موارد بالاتر آمده است: ctx-Context.salam