(转帖)C#中的异步调用

异步调用,在 C# 中可以使用这样的形式:

public class TestClass
{
    
// 
声明一个代理
    public delegate void Test();

    
// 
发送邮件信息
    public PostEMail()
    {
        
// ...
    }

    
// 
运行测试类
    public TestRun()
    {
        
// 
建立一个代理的实例
        Test test=new Test(PostEMail);

        
// 
启用异步调用发送邮件
        test.BeginInvoke(nullnull);

        
// ...
    }
}


这样,在调用 PostEMail 函数的时候,就不会阻碍当前的程序进程。这样做无疑是可以加快程序的执行过程,而不用等到 PostEMail 完全执行结束,TestRun 函数才向下执行。异步调用,可以使程序由顺序执行,变为并发执行。但是这也带来的一些问题。如果在程序中,异步调用的程序段与主程序段有较多的联系,那么将无法保证程序的正确性。例如:

public class TestClass
{
    
// 
声明一个代理
    public delegate void Test(ref string emailBody);

    
// 
发送邮件信息,并获取邮件内容
    public PostEMail(ref string emailBody)
    {
        
// ...
    }

    
// 
运行测试类
    public TestRun()
    {
        
string emailBody="";

        
// 
建立一个代理的实例
        Test test=new Test(PostEMail);

        
// 
启用异步调用发送邮件
        test.BeginInvoke(ref emailBody, nullnull);

        
// 
打印邮件内容
        Console.Write(emailBody);

        
// ...
    }
}

这里的打印邮件内容 Console.Write(emailBody);”值是不确定的。因为,test.BeginInvoke(ref emailBody, null, null); 在不确定的时刻被调用……
对于程序逻辑关系不紧凑的函数调用,我们还是可以使用异步方式的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值