J'ai une bibliothèque externe qui exécute des E/S de longue durée. Je souhaite créer une application multithread qui utilisera ThreadPool pour limiter le nombre simultané de fils et je veux ajouter des fils distribuaient ces appels externes en tant que fils de port d'achèvement (fils d'E/S) plutôt que les threads de travail (de sorte que la limite de calcul liée threads) est intact.Comment mettre en file d'attente une action de port d'achèvement (fonction liée E/S) à CLR ThreadPool
J'ai un exemple de code, qui omet la bibliothèque externe, mais montre ce que je l'ai déjà essayé.
Est-ce que quelqu'un sait comment faire cela? Ou est-ce même possible. Merci
using System;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace ThreadPoolTest
{
class MainApp
{
static void Main()
{
ThreadPool.SetMaxThreads(10, 10);
ThreadPool.QueueUserWorkItem(DoWork); //doesn't work - a compute-bound thread
ThreadPool.SetMaxThreads(10, 10);
//doesn't work - still a compute-bound thread
((Action<object>)DoWork).BeginInvoke(null, Callback, null);
Console.Read();
}
static void DoWork(object o)
{
ShowAvailableThreads();
//call to external library - that does a long I/O operation
Thread.Sleep(10);
}
static void Callback(IAsyncResult ar)
{
ShowAvailableThreads();
}
static void ShowAvailableThreads()
{
int workerThreads, completionPortThreads;
ThreadPool.GetAvailableThreads(out workerThreads,
out completionPortThreads);
Console.WriteLine("WorkerThreads: {0}," +
" CompletionPortThreads: {1}",
workerThreads, completionPortThreads);
}
}
}
Je pense que vous pourriez avoir à descendre au code non managé, voir par exemple http://www.devarticles.com/c/a/C-Sharp/IOCP-Thread-Pooling-in-C-sharp-Part-II/ – Brian
ma première estimation aussi - en regardant le lien que vous avez partagé - il n'a pas l'air trop difficile non plus. Mais, je vais attendre un peu plus pour une solution plus facile le cas échéant. – mho