zoukankan      html  css  js  c++  java
  • 委托的异步执行_demp

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

    namespace async_demo
    {
    class Program
    {
    static void Main(string[] args)
    {
    //委托的异步执行等待结束的四种情况:
    //1.endinvoke等待执行结束;
    //2.asyncwaithandle 和第一种差不多会堵住当前线程一直在那等待
    //3.通过判断.completed查看是否完成,如果没有完成可以执行一些主线程上的信息,不至于死堵着
    //4.对于执行完成后能够执行一个回调的方法,直接写到begininovke中去

    //4.new asynccallback
    test_4();


    //3.complted来判断是否完成
    // test_3();

    //2.AsyncWaitHandle
    // test_2();


    //1.EndInvoke
    // test_1();

    Console.ReadKey();

    }

    private static void test_4()
    {
    Func<string, string> fc = new Func<string, string>((string str) =>
    {
    Console.WriteLine(str +"---->start");
    System.Threading.Thread.Sleep(2000);
    return "result_msg";

    });

    Console.WriteLine("main start");

    var tt= fc.BeginInvoke("input_str", new AsyncCallback((obj)=>{
    Func<string, string> fcc = obj.AsyncState as Func<string, string>; //此方法的执行是tt.iscompleted是true的时候执行

    Console.WriteLine("jinru___");

    System.Threading.Thread.Sleep(500);

    Console.WriteLine("进入等待");

    string ss= fcc.EndInvoke(obj); //obj指的是 fc的执行返回 IAsyncResult

    Console.WriteLine(ss +"async completed");

    System.Threading.Thread.Sleep(1000);
    Console.WriteLine("执行回调函数的内容");


    }), fc);

    while (!tt.IsCompleted)
    {
    Console.WriteLine("稍等--正在等代异步是否执行完成");
    System.Threading.Thread.Sleep(200);
    }
    {

    }

    Console.WriteLine("main_progromm__star");
    }

    private static void test_3()
    {
    Func<string, string> fc = new Func<string, string>((string str) =>
    {
    Console.WriteLine(str + "---------->start");

    System.Threading.Thread.Sleep(2000);
    return "result_msg";
    });

    var tt = fc.BeginInvoke("input", null, null);

    Console.WriteLine("mail progress");

    while (!tt.IsCompleted)
    {
    Console.WriteLine("wait......." + DateTime.Now.ToString("yyyyMMddHHmmss.fff"));
    System.Threading.Thread.Sleep(200);
    }

    string ss = fc.EndInvoke(tt);

    Console.WriteLine(ss + System.Threading.Thread.CurrentThread.ManagedThreadId);

    }

    private static void test_2()
    {
    Func<string, string> fc = new Func<string, string>((obj) =>
    {
    Console.WriteLine(obj);

    return "result_msg";
    });

    var tt = fc.BeginInvoke("input_msg", null, null);
    Console.WriteLine("mail progress");

    tt.AsyncWaitHandle.WaitOne(3000);

    Console.WriteLine("asyncwaithandle.waitone over");

    string ss = fc.EndInvoke(tt);

    Console.WriteLine(ss + DateTime.Now.ToString("yyyyMMddHHmmss.fff"));

    tt.AsyncWaitHandle.Close();

    Console.WriteLine("关闭了asyncwaithandle");
    }


    private static void test_1()
    {
    Func<string, string> fc = new Func<string, string>((string in_str) =>
    {

    System.Threading.Thread.Sleep(2000); //模拟业务执行
    Console.WriteLine("{0}-->{1}--{2}", in_str, System.Threading.Thread.CurrentThread.ManagedThreadId,
    DateTime.Now.ToString("yyyyMMddHHmmss.fff"));

    return in_str + "res_result" + DateTime.Now.ToString("yyyyMMddHHmmss.fff");

    });

    var tt = fc.BeginInvoke("input_msg", null, null);

    Console.WriteLine("mail_progress" + "-->{0}--{1}",
    System.Threading.Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyyMMddHHmmss.fff"));

    string ss = fc.EndInvoke(tt);

    Console.WriteLine("返回的信息:" + ss);

    Console.WriteLine("mail_progress" + "--->{0}--{1}",
    System.Threading.Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyyMMddHHmmss.fff"));

    }


    }
    }

  • 相关阅读:
    不注意的小问题
    Hibernate、Spring和Struts工作原理及使用理由
    正则表达式贪婪与非贪婪模式
    Springmvc构造RESTful详细讲解
    正则表达式贪婪与非贪婪模式1
    BOJ二叉排序树的后序遍历
    qsort()应用大全
    辗转相除法求最大公约数(C语言)
    九度题目1014:排名 (结构体多级排序)
    BOJ第三题:二叉树前序遍历
  • 原文地址:https://www.cnblogs.com/muzililong/p/10851952.html
Copyright © 2011-2022 走看看