C# WaitCallBack - ThreadPool

Если Вы предназначаете при чтении большого количества столбцов или записей, также стоит кэшировать ординалы и получить доступ к методам со строгим контролем типов, например,

using (DbDataReader dr = cmd.ExecuteReader()) {
  if (dr.Read()) {
    int idxColumnName = dr.GetOrdinal("columnName");
    int idxSomethingElse = dr.GetOrdinal("somethingElse");

    do {
      Console.WriteLine(dr.GetString(idxColumnName));
      Console.WriteLine(dr.GetInt32(idxSomethingElse));
    } while (dr.Read());
  }
}
5
задан user215675 23 November 2009 в 07:24
поделиться

3 ответа

WaitCallback в этом случае представляет собой указатель на функцию, которая будет выполняться в потоке из пула потоков. Если поток недоступен, он будет ждать, пока один из них не освободится.

10
ответ дан 13 December 2019 в 05:37
поделиться

Из msdn

WaitCallback представляет метод обратного вызова, который вы хотите выполнить в потоке ThreadPool. Создайте делегат, передав свой метод обратного вызова конструктору WaitCallback.

Поставьте задачу в очередь на выполнение, передав делегат WaitCallback в ThreadPool .. ::. QueueUserWorkItem. Ваш метод обратного вызова выполняется, когда поток пула потоков становится доступным.

System.Threading.WaitCallBack

1
ответ дан 13 December 2019 в 05:37
поделиться

Да, ваш метод обратного вызова выполняется, когда поток пула потоков становится доступным. В этом примере вы можете видеть, что я передаю PooledProc в качестве указателя обратного вызова. Это вызывается, когда основной поток находится в спящем режиме.

public static void Main()
    {

        ThreadPool.QueueUserWorkItem(new WaitCallback(PooledProc));
        Console.WriteLine("Main thread");            
        Thread.Sleep(1000);
        Console.WriteLine("Done from Main thread");
        Console.ReadLine();
    }

    // This thread procedure performs the task.
    static void PooledProc(Object stateInfo)
    {         
        Console.WriteLine("Pooled Proc");
    }

Очевидно, что тип параметра QueueUserWorkItem является типом делегата WaitCallback, и если вы его изучите, вы можете заметить, что подпись WaitCallBack выглядит примерно так:

public delegate void WaitCallback(object state);

Метод PooledProc имеет та же подпись, и, следовательно, мы можем передать то же самое для обратного вызова.

1
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: