zoukankan      html  css  js  c++  java
  • 关于InvokeMethod Activity的异步调用

    讨论地址:http://www.cnblogs.com/foundation/archive/2009/12/17/1626617.html

    结论是IsCompleted的设置被忽略,看代码里注释

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace DelayAndThreadWorkflow
    {
        public class myAsyncResult : IAsyncResult
        {
            public object AsyncState
            { 
                get;  set;
            }
    
            public System.Threading.WaitHandle AsyncWaitHandle
            { 
                get;  set;
            }
    
            public bool CompletedSynchronously
            {
                get;
                set;
            }
    
            public bool IsCompleted
            {
                get;
                set;
            }
            public myAsyncResult()
            {
                IsCompleted = false;
                CompletedSynchronously = false;
            }
    
        }
    
        public class threadMethod
        {
            AsyncCallback callback;
            IAsyncResult asyncResult;
            int n;
            int result;
            public void myCall(int n)
            {
                for (int i = 1; i <= n; i++)
                {
                    result = result + i;
                }
                System.Console.WriteLine("myCall,result:{0}", result);
            }
    
            #region
            /*
              1。如果myAsyncResult.CompletedSynchronously=true指示是同步完成的方法
             * 那么WFRuntime就没必要判断myAsyncResult.IsCompleted,会在完成BeginmyCall后马上掉用
             * EndmyCall方法
              2。如果myAsyncResult.CompletedSynchronously=fasle
             * 那么WFRuntime只会根据会在activity回调callback时调用EndmyCall,同样忽略IsCompleted的设置
             */
            #endregion
            public IAsyncResult BeginmyCall(int n, AsyncCallback callback, object asyncState)
            {
                System.Console.WriteLine("BeginmyCall,n:{0}", n);
                this.n = n;
                this.callback = callback;
                this.asyncResult = new myAsyncResult() { AsyncState = asyncState,IsCompleted=false };
                System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(myProcessThread));
                thread.Start();
    
                
                return this.asyncResult;
            }
    
            public void EndmyCall(IAsyncResult r)
            {
                Console.WriteLine("EndmyCall,result:{0}", result);
            }
    
            public void myProcessThread()
            {
                Console.WriteLine("myProcessThread");
                for (int i = 1; i <= n; i++)
                {
                    result = result + i;
                    System.Console.WriteLine(i);
                    System.Threading.Thread.Sleep(500);
                }
                //(asyncResult as myAsyncResult).IsCompleted = true;
                callback(asyncResult);
            }
        }
    }
    View Code
  • 相关阅读:
    Go安装
    Redis 安装与使用
    scala总结
    C++学习笔记4
    LeetCode 22.将数组分成和相等的三个部分
    LeetCode 21.二叉树的直径 DFS深度遍历
    LeetCode 20.买卖股票的最佳时机 暴力破解法与动态规划
    LeetCode 19.凑零钱问题 动态规划
    LeetCode 18.队列的最大值
    Java SSM Spring MVC 三层架构和MVC+SpringMVC的入门案例+请求参数的绑定+常用的注解
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3955410.html
Copyright © 2011-2022 走看看