나는 어디에서나 검색해 왔으며 매개 변수를 수용하는 특정 기능을 가진 200-300 개의 작업을 추가 할 수있는 솔루션이 필요합니다. 대리자 및 단일 매개 변수로 개체에 대해 알고 있지만 개체 parametar 대신 다른 paramentars 함께 작업을 각각 큐에 수 있도록 뭔가 기대했다.스레드 풀 매개 변수
도움을 주시면 감사하겠습니다.
나는 어디에서나 검색해 왔으며 매개 변수를 수용하는 특정 기능을 가진 200-300 개의 작업을 추가 할 수있는 솔루션이 필요합니다. 대리자 및 단일 매개 변수로 개체에 대해 알고 있지만 개체 parametar 대신 다른 paramentars 함께 작업을 각각 큐에 수 있도록 뭔가 기대했다.스레드 풀 매개 변수
도움을 주시면 감사하겠습니다.
당신이 뭔가를 할 수 있습니다
void MyMethod(int param)
{
....
}
...
ThreadPool.QueueUserWorkItem(_ => MyMethod(1));
ThreadPool.QueueUserWorkItem(_ => MyMethod(2));
ThreadPool.QueueUserWorkItem(_ => MyMethod(3));
...
ThreadPool.QueueUserWorkItem(_ => MyMethod(42));
또 다른 옵션은 유형
Object
의 매개 변수를 받아
MyMethod
을하고,
QueueUserWorkItem
의 두 번째 오버로드를 사용하는 것입니다
:
void MyMethod(object param)
{
int value = (int)param;
....
}
...
ThreadPool.QueueUserWorkItem(MyMethod, 1);
ThreadPool.QueueUserWorkItem(MyMethod, 2);
ThreadPool.QueueUserWorkItem(MyMethod, 3);
...
ThreadPool.QueueUserWorkItem(MyMethod, 42);
개체 목록을 개체 매개 변수로 보내지 못하도록하는 것이 없으므로 실제로는 여러 매개 변수를 스레드 함수에 전달할 수 있습니다.
당신이 찾고있는을 매개 변수화 된 스레드 시작 (아래 예제)
string myUrl = 'asd'
Thread t = new Thread (new ParameterizedThreadStart(FetchUrl));
t.Start (myUrl);
static void FetchUrl(object url)
{
// use url here, probably casting it to a known type before use
}
또는 System.Threading.Tasks에서 발견 작업을 사용할 수 있습니다 ..
Task.Factory.StartNew(() => {
File.WriteAllBytes(path, response);
});
간단한 샘플 :
for (int i = 0; i < 100; i++)
{
System.Threading.ThreadPool.QueueUserWorkItem(k =>
{
TestMethod(k);
}, i);
}