现在的位置: 首页 > 综合 > 正文

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

2013年10月04日 ⁄ 综合 ⁄ 共 1067字 ⁄ 字号 评论关闭

异步调用,在 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); 在不确定的时刻被调用……
对于程序逻辑关系不紧凑的函数调用,我们还是可以使用异步方式的

抱歉!评论已关闭.