• 大小: 18KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C#
  • 标签:

资源简介

c# 实现多线程的操作,轮询等待回调等异步操作,适合初学者的源码

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.Text;

using System.Threading;

namespace ConsoleApplication1
{
    public delegate string AsyncDelegate(int callDuration out int threadId);
    class Program
    {
        static void Main(string[] args)
        {
            Fun1();
            Fun2();
            Fun3();
            Fun4();
            Console.ReadLine();
        }
        private static int threadId;

        //阻塞等待   使用 EndInvoke 等待异步调用  
        static void Fun1()
        {
            //创建示例类的实例。
            AsyncDemo ad = new AsyncDemo();
            // 创建委托
            AsyncDelegate dlgt = new AsyncDelegate(ad.TestMethod);
            // 委托在这里开始异步调用。
            IAsyncResult ar = dlgt.BeginInvoke(5000out threadId null null);
            //人为的线程阻塞。
            Thread.Sleep(0);
            Console.WriteLine(“主线程 {0}开始工作“Thread.CurrentThread.ManagedThreadId);
            // 委托开始EndInvoke调用,这个过程会使主线程等待异步调用完成并返回结果。
            string ret = dlgt.EndInvoke(out threadId ar);
            Console.WriteLine(“使用 EndInvoke 等待异步调用!!!“);
            Console.WriteLine(“异步线程 {0}返回值 \“{1}\“.“ threadId ret);
            Console.WriteLine(“主线程{0}结束工作“ Thread.CurrentThread.ManagedThreadId);
        }
        
        //阻塞等待  使用 WaitHandle 等待异步调用
        static void Fun2()
        {
            AsyncDemo ad = new AsyncDemo();
            AsyncDelegate dlgt = new AsyncDelegate(ad.TestMethod);
            IAsyncResult ar = dlgt.BeginInvoke(5000out threadId null null);
            Thread.Sleep(0);
            Console.WriteLine(“主线程 {0}开始工作“ Thread.CurrentThread.ManagedThreadId);
            //主线程在这里等待,直到异步线程执行完。
            ar.AsyncWaitHandle.WaitOne();
            // 和前一方案的区别在于,你可以在异步调用完成后,获取异步调用返回值之前
            //在这里做点任何你想作的事。
            //调用EndInvoke获取异步调用的返回结果.
            string ret = dlgt.EndInvoke(out threadId ar);
            Console.WriteLine(“使用 WaitHandle 等待异步调用!!!“);
            Console.WriteLine(“异步线程 {0}返回值 \“{1}\“.“ threadId ret);
            Console.WriteLine(“主线程{0}结束工作“ Thread.CurrentThread.ManagedThreadId);
        }

        //轮询状态    轮询异步调用完成
        static void Fun3()
        {
            AsyncDemo ad = new AsyncDemo();
            AsyncDelegate dlgt = new AsyncDelegate(ad.TestMethod);
            IAsyncResult ar = dlgt.BeginInvoke(5000out threadId null null);
            Console.WriteLine(“使用轮询异步调用!!!“);
            Console.WriteLine(“主线程 {0}开始工作“ Thread.CurrentThread.ManagedThreadId);
            //这里每隔10毫秒就检测(轮询)一下异步执行的状态,
            //直到异步调用完成,IsCompleted的值变为ture为止。
            while (ar.IsCompleted == false)
            {
                Thread.Sleep(10);
            }

            //还记得微软的那个善意的提醒吗?虽然IsCompleted为true了,
            //我们还是调用一下EndInvoke,来获取返回值。
            string ret = dlgt.EndInvoke(out threadId ar);
            Console.WriteLine(“异步线程 {0}返回值 \“{1}\“.“ threadId ret);
            Console.

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      16384  2010-06-07 16:59  ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe

     文件      15872  2010-06-07 16:59  ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.pdb

     文件       5632  2005-11-11 22:25  ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.vshost.exe

     文件       1972  2010-06-06 16:39  ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.csproj

     文件        617  2010-06-07 17:01  ConsoleApplication1\ConsoleApplication1\obj\ConsoleApplication1.csproj.FileListAbsolute.txt

     文件      16384  2010-06-07 16:59  ConsoleApplication1\ConsoleApplication1\obj\Debug\ConsoleApplication1.exe

     文件      15872  2010-06-07 16:59  ConsoleApplication1\ConsoleApplication1\obj\Debug\ConsoleApplication1.pdb

     文件       5691  2010-06-07 17:05  ConsoleApplication1\ConsoleApplication1\Program.cs

     文件       1221  2010-06-06 16:39  ConsoleApplication1\ConsoleApplication1\Properties\AssemblyInfo.cs

     文件        946  2010-06-06 16:39  ConsoleApplication1\ConsoleApplication1.sln

    ..A..H.     10752  2010-06-07 17:05  ConsoleApplication1\ConsoleApplication1.suo

     目录          0  2010-06-06 16:39  ConsoleApplication1\ConsoleApplication1\obj\Debug\TempPE

     目录          0  2010-06-06 16:43  ConsoleApplication1\ConsoleApplication1\bin\Debug

     目录          0  2010-06-07 16:59  ConsoleApplication1\ConsoleApplication1\obj\Debug

     目录          0  2010-06-06 16:38  ConsoleApplication1\ConsoleApplication1\bin

     目录          0  2010-06-06 16:41  ConsoleApplication1\ConsoleApplication1\obj

     目录          0  2010-06-06 16:39  ConsoleApplication1\ConsoleApplication1\Properties

     目录          0  2010-06-07 17:05  ConsoleApplication1\ConsoleApplication1

     目录          0  2010-06-06 16:39  ConsoleApplication1

----------- ---------  ---------- -----  ----

                91343                    19


评论

共有 条评论

相关资源