Информация об изменениях

Сообщение Вопрос по асинхронности от 29.01.2017 10:35

Изменено 29.01.2017 12:12 AndrewVK

Вопрос по асинхронности
Есть такое вот простое приложение.
Хочу понять именно с асинхронностью поиграть

не пойму как продолжить выполнение в методе Run, только после окончания WriteCallbackCompleted.
что я не так делаю?

using System;
using System.Threading.Tasks;
 
namespace MonitorEnterTest
{
    class Program
    {
        static void Main(string[] args)
        {
            TPL tpl = new TPL();
            tpl.Run();

            Console.WriteLine("Main completed");
            Console.ReadKey();
        }      
    }

    class TPL
    {
        public void Run()
        {
            AsyncCallback asyncCallback = new AsyncCallback(WriteCallbackCompleted);            
            IAsyncResult ar = WriteCallbackStarted(asyncCallback);             
    
            //Надо дождаться окончания выполнения
        }

        IAsyncResult WriteCallbackStarted(AsyncCallback ac)
        {
            var task = Task.Factory.StartNew(() => {  });
            if (ac != null)
            {             
                task.ContinueWith((r) =>
                                        {                                            
                                            ac(task);                                         
                                        }, TaskContinuationOptions.ExecuteSynchronously);
            }                    
            Console.WriteLine("WriteCallbackStarted completed");
            return task;
        }

        void WriteCallbackCompleted(IAsyncResult ar)
        {
            Console.WriteLine("WriteCallbackCompleted");
        }
    }
}
Вопрос по асинхронности
Есть такое вот простое приложение.
Хочу понять именно с асинхронностью поиграть

не пойму как продолжить выполнение в методе Run, только после окончания WriteCallbackCompleted.
что я не так делаю?

using System;
using System.Threading.Tasks;
 
namespace MonitorEnterTest
{
    class Program
    {
        static void Main(string[] args)
        {
            TPL tpl = new TPL();
            tpl.Run();

            Console.WriteLine("Main completed");
            Console.ReadKey();
        }      
    }

    class TPL
    {
        public void Run()
        {
            AsyncCallback asyncCallback = new AsyncCallback(WriteCallbackCompleted);            
            IAsyncResult ar = WriteCallbackStarted(asyncCallback);             
    
            //Надо дождаться окончания выполнения
        }

        IAsyncResult WriteCallbackStarted(AsyncCallback ac)
        {
            var task = Task.Factory.StartNew(() => {  });
            if (ac != null)
            {             
                task.ContinueWith((r) =>
                                        {                                            
                                            ac(task);                                         
                                        }, TaskContinuationOptions.ExecuteSynchronously);
            }                    
            Console.WriteLine("WriteCallbackStarted completed");
            return task;
        }

        void WriteCallbackCompleted(IAsyncResult ar)
        {
            Console.WriteLine("WriteCallbackCompleted");
        }
    }
}
async