[Mono-dev] Async IO/Completion ports/threads

Joe Dluzen jdluzen at gmail.com
Mon Aug 29 12:30:09 EDT 2011

Hi all,

I was looking at async IO support in Mono, which does seem to use
epoll. I found some sample code at
and it does seem to work under Windows .NET, the number of availableIO
threads is 1 less than maxIO. But under Mono 2.10.3 on Win x64, it has
1 less regular worker threads. Mono 2.10.3 on a Ubuntu 11.04 VM is the
same. A bug? Or should I try something else?


Slightly modified code:

using System;
using System.IO;
using System.Net;
using System.Threading;

namespace IoCompletionPortTest
    class Program
        static WebRequest request;

        static IAsyncResult BeginDownload(object sender, EventArgs e,
AsyncCallback cb, object state)
            request = WebRequest.Create("http://www.google.com");
            return request.BeginGetResponse(cb, state);

        static void Main(string[] args)
            IAsyncResult r = BeginDownload(null, null, (ar) =>
                    int maxWorkers, maxIO, availableWorkers, availableIO;
                    ThreadPool.GetMaxThreads(out maxWorkers, out maxIO);
availableWorkers, out availableIO);
                    string html;
                    using (WebResponse response = request.EndGetResponse(ar))
                    using (StreamReader reader = new
                        html = reader.ReadToEnd();
                    Console.WriteLine("{0} out of {1} workers, {2} out
of {3} IOs", availableWorkers, maxWorkers, availableIO, maxIO);
                }, null);

More information about the Mono-devel-list mailing list