为什么我的异步调用不起作用?

时间:2010-04-30 07:25:32

标签: c# multithreading

我正在努力了解什么是IAsyncresult好,因此我写了这段代码。问题是它的表现就像我称之为“MetodaAsync”的正常方式。在调试时,程序在此处停止,直到方法完成。感谢任何帮助,谢谢。

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;
        }


    }
}

2 个答案:

答案 0 :(得分:2)

为了“看到”它是多线程的,请执行以下操作:

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");

但一般来说,你会从回调中调用EndInvoke。

答案 1 :(得分:1)

它在EndInvoke中阻塞。你可以在BeginInvoke和EndInvoke之间的主线程中做一些有用的工作。