系统中同步方法很多,当串行时响应时间会比较长,有些调用可以异步来做,当需要结果时只要有就行。如果调用的方法本身就是异步的这个还好。但是因为很多方法都是同步实现的,所以急需要一种框架或者工具来实现同步方法的异步调用,我搜索了下没找到比较好的解决方案,不过也有一些可供参考的,这里总结下:
1:NET Framework提供的异步调用同步方法
使用异步方式调用同步方法
http://msdn.microsoft.com/zh-cn/library/2e08f6yc(v=vs.80).aspx
截取API使用方式如下:
// Create the delegate.
AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);
// Initiate the asychronous call.
IAsyncResult result = caller.BeginInvoke(3000,
out threadId, null, null);
string returnValue = caller.EndInvoke(out threadId, result);
ad.TestMethod 就是需要异步调用的同步方法,可惜java没有这么简洁优美的语法。
2:目前找到的实现异步调用的java框架 asyn4j
http://code.google.com/p/asyn4j/
国人原创的,api还可以,还不支持future模式,但是支持也很简单。
3:spring 3.0提供的任务调度
http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/scheduling.html
API使用例子:
simplest case, the annotation may be applied to a void-returning method.
@Async
void doSomething() {
// this will be executed asynchronously
}
Unlike the methods annotated with the @Scheduled annotation, these methods can expect arguments, because they will be invoked in the "normal" way by callers at runtime rather than from a scheduled task being managed by the container. For example, the following is a legitimate application of the @Async annotation.
@Async
void doSomething(String s) {
// this will be executed asynchronously
}
Even methods that return a value can be invoked asynchronously. However, such methods are required to have a Future typed return value. This still provides the benefit of asynchronous execution so that the caller can perform other tasks prior to calling get() on that Future.
@Async
Future<String> returnSomething(int i) {
// this will be executed asynchronously
}
分享到:
相关推荐
Java异步调用转同步方法实例详解 Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的技术,主要用于解决异步调用过程中的阻塞问题。异步调用是一种非阻塞的调用方式,调用方在调用过程中,不...
Node.js中让异步操作变成同步的方法通常是指将非阻塞的异步调用改写为在逻辑上表现得像同步调用的方式。Node.js中异步操作是通过回调函数、Promises和async/await等技术来实现的。以下我们详细讲解如何通过这些方法...
Angular异步变同步处理方法是前端开发中用于解决多个接口请求顺序依赖问题的一种技术手段。由于异步操作的特性,它能处理那些按顺序依次执行的接口调用,而不会阻塞主线程,让页面陷入假死状态。在Angular中,主要...
在 C# 编程中,调用方法可以分为同步调用和异步调用两种。同步调用是指当前线程阻塞,等待方法执行完毕后继续执行,而异步调用则是将方法调用交给线程池,当前线程继续执行不阻塞。异步调用可以使用 BeginInvoke 和 ...
在这个“Labview异步调用示例”中,我们将深入探讨LabVIEW如何实现异步编程,这是一种允许程序在等待某个操作完成时继续执行其他任务的技术。 异步调用在LabVIEW中通常涉及事件结构、多线程和回调函数等概念。首先...
在这个"WebService同步异步调用示例代码.rar"压缩包中,我们很可能找到C#语言编写的源代码,这些代码演示了如何使用.NET框架来创建和消费WebService,特别是在同步和异步模式下进行调用的方法。 同步调用是最基础的...
在LabVIEW编程环境中,异步调用和可重入VI(Virtual Instrument)是两种非常重要的技术,它们可以显著提升程序的执行效率和响应性。本文将深入探讨这两个概念以及如何在LabVIEW中进行相应的设置。 首先,让我们了解...
### ASP.NET 异步调用后台方法提交 在ASP.NET开发中,为了提升用户体验和页面响应速度,异步调用后台方法是一种常见的技术手段。本文将详细介绍如何在ASP.NET中实现异步调用后台方法,并解释相关的代码实现细节。 ...
在编程领域,同步和异步方法是处理任务执行方式的两种基本模式,它们在系统设计和性能优化中扮演着至关重要的角色。理解这两者的区别及其优缺点对于开发高效的应用至关重要。 **同步方法**指的是调用一个函数或方法...
### C#中的异步调用:好处与方法 在现代软件开发中,特别是在涉及大量数据处理、网络请求或用户交互的应用程序中,异步编程变得越来越重要。C#作为一种广泛使用的编程语言,提供了多种实现异步操作的方式。本文将...
2. **委托与事件**:在异步调用中,委托扮演了关键角色。它们是类型安全的函数指针,可以作为参数传递给其他方法。`TestAsyncViewForm`可能定义了一些事件处理程序,如`ProgressChanged`,并通过委托将这些事件绑定...
异步调用是一种非阻塞的调用方式,它允许主线程在等待子线程完成任务的同时,继续执行其他工作。在Labview中,可以通过事件结构或回调函数来实现异步调用。在这个工程中,主线程通过发送任务到子线程,然后继续其...
在服务接口中,每个同步操作都有对应的`BeginXXX`和`EndXXX`方法用于异步调用。例如,对于`GetData`方法,会有`BeginGetData`和`EndGetData`。 ```csharp using (ServiceReference1.Service1Client client = new ...
在.NET Framework中,可以使用多种方式实现Winform界面的异步调用: 1. **BackgroundWorker组件**:这是.NET Framework提供的一种简单易用的异步模型。通过创建BackgroundWorker对象,设置其DoWork事件处理程序执行...
在“并参递参数”方面,意味着我们在创建新线程或发起异步调用时,需要传递参数给被调用的方法。这些参数可以是数值、对象、数据结构等,它们用于定义任务的具体行为。例如,在一个网络请求中,我们可能需要传递URL...
首先,异步调用的基本思想是,当一个函数或方法被调用时,它并不立即返回结果,而是立即返回一个代表未来结果的对象(如Promise或Future)。调用者可以继续执行后续任务,而不会等待该异步操作完成。当异步操作的...
在C#编程中,异步调用是一种关键的技术,它允许程序在等待耗时操作(如网络请求或I/O操作)完成时,不阻塞主线程执行其他任务。这种技术提高了应用程序的响应性和效率,特别是在UI应用中,可以避免用户界面的冻结。...
本文将通过对DSF同步调用与Flower+DSF异步调用的对比测试,揭示两种调用方式在应对服务延迟或异常时的差异,并探讨Flower异步调用的优势。 一、问题背景 DSF的同步阻塞调用方式在遇到数据库异常或其他原因导致的...