Пример #1
0
        public static AsyncTask <R> BeginTask <R>(AsyncTask <R> function)
        {
            R    retv      = default(R);
            bool completed = false;

            object sync = new object();

            IAsyncResult asyncResult = function.BeginInvoke(
                iAsyncResult =>
            {
                lock (sync)
                {
                    completed = true;
                    retv      = function.EndInvoke(iAsyncResult);
                    Monitor.Pulse(sync);
                }
            }, null);

            return(delegate
            {
                lock (sync)
                {
                    if (!completed)
                    {
                        Monitor.Wait(sync);
                    }
                    return retv;
                }
            });
        }