异步调用,在 C# 中可以使用这样的形式:
public class TestClass
{
// 声明一个代理
public delegate void Test();
// 发送邮件信息
public PostEMail()
{
// ...
}
// 运行测试类
public TestRun()
{
// 建立一个代理的实例
Test test=new Test(PostEMail);
// 启用异步调用发送邮件
test.BeginInvoke(null, null);
// ...
}
}
这样,在调用 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, null, null);
// 打印邮件内容
Console.Write(emailBody);
// ...
}
}
这里的“打印邮件内容 Console.Write(emailBody);”值是不确定的。因为,test.BeginInvoke(ref emailBody, null, null); 在不确定的时刻被调用……
对于程序逻辑关系不紧凑的函数调用,我们还是可以使用异步方式的
(转帖)C#中的异步调用
最新推荐文章于 2024-11-14 17:50:52 发布