- بله. برای نمونه تریگر Save بر روی حالت InProgress، در مثال جاری وجود دارد.
- آیا برنامهی وب یا چند ریسمانی هست؟ اگر بله از روشهای قفل گذاری روی قسمتی از کد، برای جلوگیری از دسترسی همزمان به آن (حتی چند کلیک پشت سر هم کاربر هم در عمل همین معنا را پیدا میکند) استفاده کنید:
// فقط یک ترد امکان دسترسی به کد را داشته باشد
private static readonly SemaphoreSlim _semaphoreSlim = new SemaphoreSlim(1,1);
public async Task RunAsync()
{
// شروع تمام تردها معلق خواهند شد تا این سمافور به پایان برسد
// پس از پایان کار ترد جاری، فقط یک ترد در حال انتظار، مجوز دسترسی به قطعه کد بعدی را خواهد یافت و به همین ترتیب برای سایر تردها
await _semaphoreSlim.WaitAsync();
try
{
await Task.Delay(20000); // Your code here
}
finally
{
_semaphoreSlim.Release();
}
}
- خطاها هم میتوانند یک state جدید مانند Rejected مثال این مطلب باشند.