Maison développement back-end Tutoriel C#.Net C#异步方法执行代码

C#异步方法执行代码

Nov 10, 2016 am 10:03 AM

using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading;  
using System.Runtime.Remoting.Messaging;  
    
namespace ConsoleApplication1  
{  
    public delegate int AddHandler(int a, int b);  
    public class AddMethod  
    {  
        public static int Add(int a, int b)  
        {  
            Console.WriteLine("开始计算:" + a + "+" + b);  
            Thread.Sleep(3000); //模拟该方法运行三秒  
            Console.WriteLine("计算完成!");  
            return a + b;  
        }  
    }  
        
            
    //**************同步调用***********  
    //委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。  
    
    //**************异步调用***********  
    //异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程可以继续执行。  
    //委托的异步调用通过BeginInvoke和EndInvoke来实现。  
    
    //**************异步回调***********  
    //用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。  
    
    //注意: BeginInvoke和EndInvoke必须成对调用.即使不需要返回值,但EndInvoke还是必须调用,否则可能会造成内存泄漏。  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Console.WriteLine("===== 同步调用 SyncInvokeTest =====");  
            AddHandler handler = new AddHandler(AddMethod.Add);  
            int result=handler.Invoke(1,2);  
            Console.WriteLine("继续做别的事情。。。");  
    
            Console.WriteLine(result);  
            Console.ReadKey();  
    
    
            Console.WriteLine("===== 异步调用 AsyncInvokeTest =====");  
            AddHandler handler1 = new AddHandler(AddMethod.Add);  
            IAsyncResult result1=handler1.BeginInvoke(1,2,null,null);  
            Console.WriteLine("继续做别的事情。。。");  
    
            //异步操作返回  
            Console.WriteLine(handler1.EndInvoke(result1));  
            Console.ReadKey();  
    
            Console.WriteLine("===== 异步回调 AsyncInvokeTest =====");  
            AddHandler handler2 = new AddHandler(AddMethod.Add);  
            IAsyncResult result2 = handler2.BeginInvoke(1, 2, new AsyncCallback(Callback), null);  
            Console.WriteLine("继续做别的事情。。。");  
            Console.ReadKey();  
    
    
            //异步委托,也可以参考如下写法:  
            //Action<object> action=(obj)=>method(obj);  
            //action.BeginInvoke(obj,ar=>action.EndInvoke(ar),null);  
            //简简单单两句话就可以完成一部操作。  
        }  
        static void Callback(IAsyncResult result)  
        {  
            AddHandler handler = (AddHandler)((AsyncResult)result).AsyncDelegate;  
            Console.WriteLine(handler.EndInvoke(result));  
        }  
    }  
}
Copier après la connexion

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les alternatives à Null en C Quelles sont les alternatives à Null en C Mar 03, 2025 pm 05:37 PM

Cet article explore les défis des déréférences du pointeur nul dans C. Il soutient que le problème n'est pas nul lui-même, mais son utilisation abusive. L'article détaille les meilleures pratiques pour prévenir les déréférences, y compris les contrôles de pré-déréférence, le pointeur initiali

Quel compilateur de langue C est le meilleur? Quel compilateur de langue C est le meilleur? Mar 03, 2025 pm 05:39 PM

Cet article guide les débutants sur le choix d'un compilateur C. Il fait valoir que le CCG, en raison de sa facilité d'utilisation, de sa large disponibilité et de ses vastes ressources, est la meilleure pour les débutants. Cependant, il compare également GCC, Clang, MSVC et TCC, mettant en évidence leur différenciation

Comment ajouter le compilateur C de niveau suivant Comment ajouter le compilateur C de niveau suivant Mar 03, 2025 pm 05:44 PM

Cet article explique comment créer de nouvelles caractères en C en C en utilisant la séquence \ n Escape dans printf et met des fonctions. Il détaille les fonctionnalités et fournit des exemples de code démontrant son utilisation pour les ruptures de ligne en sortie.

Null est-il toujours important dans la programmation moderne dans le langage C? Null est-il toujours important dans la programmation moderne dans le langage C? Mar 03, 2025 pm 05:35 PM

Cet article met l'accent sur l'importance continue de Null dans la programmation C moderne. Malgré les progrès, NULL reste crucial pour la gestion explicite du pointeur, empêchant les défauts de segmentation en marquant l'absence d'une adresse mémoire valide. Meilleur prac

Quelles sont les versions Web des compilateurs de langage C? Quelles sont les versions Web des compilateurs de langage C? Mar 03, 2025 pm 05:42 PM

Cet article passe en revue les compilateurs C en ligne pour les débutants, en se concentrant sur la facilité d'utilisation et les capacités de débogage. Onlinegdb et Rep.Il sont mis en évidence pour leurs interfaces conviviales et leurs outils de débogage utiles. Autres options comme Programiz et Compil

CLANGE COMMANDE COMMANDE C compilateur de langage C Résumé du site Web officiel CLANGE COMMANDE COMMANDE C compilateur de langage C Résumé du site Web officiel Mar 03, 2025 pm 05:41 PM

Cet article compare les plateformes de programmation C en ligne, mettant en évidence les différences de fonctionnalités telles que les outils de débogage, les fonctionnalités IDE, la conformité standard et les limites de mémoire / d'exécution. Il soutient que la "meilleure" plate-forme dépend des besoins des utilisateurs,

Méthode de copie du code par compilateur de langage C Méthode de copie du code par compilateur de langage C Mar 03, 2025 pm 05:43 PM

Cet article traite de la copie de code efficace dans les Cides. Il souligne que la copie est une fonction IDE, pas une fonctionnalité de compilateur, et détaille des stratégies pour une efficacité améliorée, y compris l'utilisation d'outils de sélection IDE, le pliage de code, la recherche / remplacer, Templa

Comment résoudre le problème de ne pas faire apparaître la fenêtre de sortie par le compilateur de langage C Comment résoudre le problème de ne pas faire apparaître la fenêtre de sortie par le compilateur de langage C Mar 03, 2025 pm 05:40 PM

Cet article dépanne les fenêtres de sortie manquantes dans la compilation du programme C. Il examine des causes telles que le non-exécution de l'exécutable, des erreurs de programme, des paramètres de compilateur incorrects, des processus de fond et une terminaison rapide du programme. Les solutions impliquent ch

See all articles