我如何等待异步WCF服务方法完成?

时间:2014-12-15 17:07:32

标签: c# wcf silverlight asynchronous windows-phone-8.1

我的WCF服务中有两种方法:

public interface IPriceService
{
    [OperationContract(Name = "GetPrice")]
    decimal GetPrice(long ID);

    [OperationContract(Name = "GetProductID")]
    long GetProductID(string productName);
}

在一个方面,我想做两件事。我想调用方法GetProductID,然后调用方法GetPrice。所以我这样做:

PriceService.PriceServiceClient service;
service = new PriceService.PriceServiceClient();
service.PobierzPrzejsciaCompleted += service_GetPriceCompleted;
service.PobierzStacjeBenzynoweCompleted += service_GetProductIDCompleted;

service.GetProductIDAsync(productName);
service.GetPriceAsync(Id);

GetProductID会返回一个ID,因此我会在GetProductIDCompleted事件中获取该ID。然后我将此ID作为参数传递给GetPrice方法。

我想要的是: GetProductIdAsync方法应首先执行。 GetPriceAsync方法应该等到上一个方法完成。

2 个答案:

答案 0 :(得分:1)

如果您想让它们同步执行,您也可以简单地使用同步版本:

var productId = service.GetProductID(productName)
var price = service.GetPrice(productId)

如果您想坚持异步调用,可以从service.GetPriceAsync已完成的函数调用service_GetProductIDCompleted函数...

答案 1 :(得分:0)

您可以使用BackgroundWorker对象,然后订阅run worker completed事件。在那种情况下,您将能够运行它。

类似

Worker.RunWorkerAsync()
Worker.RunWorkerCompleted += youractionwhencompletedmethod