开发者

Why my async call does not work?

开发者 https://www.devze.com 2022-12-29 04:58 出处:网络
I am trying to understand what is IAsyncresult good and therefore I wrote this code. The problem is it behaves as I called \"MetodaAsync\" normal way. While debugging, the program stops here until the

I am trying to understand what is IAsyncresult good and therefore I wrote this code. The problem is it behaves as I called "MetodaAsync" normal way. While debugging, the program stops here until the method completed. Any help appreciated, thank you.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        delegate int Delegat();

        static void Main(string[] args)
        {
            Program p=new Program();
            Delegat d = new Delegat(p.MetodaAsync);
            IAsyncResult a = d.BeginInvoke(null, null); //I have removed callback
            int returned=d.EndInvoke(a);
            Console.WriteLine("AAA");

        }
        private int MetodaAsync()
        {
            int AC=0;
            for (int I = 0; I < 600000; I++)
            {
                for (int A = 0; A < 6000000; A++)
                {

                }
                Console.Write("B"开发者_开发知识库);
            }
            return AC;
        }


    }
}


In order to 'see' it is multithreaded, do something like:

IAsyncResult a = d.BeginInvoke(null, null); //I have removed callback
for (int j = 0; j < 100; j++)
{
    Console.Write("JJJ");
    Thread.Sleep(1);
}    
int returned=d.EndInvoke(a);
Console.WriteLine("AAA");

But in general, you would call EndInvoke from the callback.


It blocks in EndInvoke. You could do some useful work in the main thread between BeginInvoke and EndInvoke.

0

精彩评论

暂无评论...
验证码 换一张
取 消