간단한 "SemaphoreSlim"사용 방법
8776 단어 taskC#SemaphoreSlim
Task
의 수량은 SemaphoreSlim
이다.기본적
//机を2つ用意
SemaphoreSlim ss = new SemaphoreSlim(2);
//机が1つ埋まる
ss.Wait();
//机がさらに1つ埋まる
ss.Wait();
//2つとも埋まった机のうち、1つだけ空ける
ss.Release(1);
//空いてる机の数を確認
Console.WriteLine(ss.CurrentCount);
//実行結果は、1
Wait
책상을 사용합니다.Release
빈 테이블을 사용하거나 새 테이블을 준비하세요.CurrentCount
테이블 수량 확인간단한 예
using System;
using System.Threading;
using System.Threading.Tasks;
class Program {
static void Main(string[] args) {
SemaphoreSlim ss = new SemaphoreSlim(0); //最初は、机を1つも作らない
ss.Release(1); //机を1つだけ追加
//机が1つしかないので、作業1だけが実行される
Task task1 = Task.Run(() =>{ss.Wait(); Console.WriteLine("作業1");});
Task task2 = Task.Run(() =>{ss.Wait(); Console.WriteLine("作業2");});
//1つしかない机は、作業1で埋まっているので、0
Console.WriteLine( ss.CurrentCount);
Console.ReadLine();
}
}
Task 를 실행하고 싶어도 빈 테이블 수만 실행매개 변수
SemaphoreSlim ss = new SemaphoreSlim(1, 6);
첫 번째 파라미터는 테이블의 수량입니다 (이후 추가 가능)두 번째 파라미터는 책상의 최대 수이다
책상은 한 개뿐이니 최대 여섯 개까지 늘릴 수 있다.
SemaphoreSlim ss = new SemaphoreSlim(1);
매개 변수는 테이블의 수량입니다. (최대 수량은 설정되지 않았습니다. 이후에 많이 추가할 수 있습니다.)Wait과 WaitAsync의 차이점
using System;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Generic;
class Program {
static void Main(string[] args) {
Sub();
Console.WriteLine("main"); //A
Console.ReadLine();
}
public static async Task Sub() {
SemaphoreSlim ss = new SemaphoreSlim(2);
List<Task> list = new List<Task>();
int num = 10;
while(num-- > 0) {
await ss.WaitAsync(); //B Aが先に実行される(非同期)
//ss.Wait(); //C Aが後に実行される(同期)
list.Add( Task.Run( () => {
Thread.Sleep(100);
Console.WriteLine("-");
ss.Release();
}));
}
await Task.WhenAll(list);
}
}
Wait 호출자 대기(동기화)비동기식 Waitasync
Wait 메서드를 입력한 후 True로 돌아갑니다.
만약 이미 꽉 차서 들어가지 않았다면, 나는 너에게 false를 돌려줄 것이다.
취소
CancellationToken은 CancellationToken Source를 생성한 다음에.
CancellationTokenSource.Token에서 얻습니다.
CancellationTokenSource 요청을 취소합니다.저는 Cancel()이라고 합니다.
계속하다
Reference
이 문제에 관하여(간단한 "SemaphoreSlim"사용 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/october/items/79f470653c96d65cef19텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)