异步调用Web服务方法

时间:2017-08-15 23:11:03

标签: c# .net async-await

我需要异步调用Web服务上的Register()方法(使用C#)。 Web服务中实际Register方法的实现不返回任何值。但是如果方法失败,它会引发异常。鉴于此,以下代码看起来好吗?

public void RegisterProduct(string productName)
{
    await RegisterProductAsync();
}


private async static Task RegisterProductAsync(string productName)
{
    try
    { 
         await myWebService.Register(productName);   
    }
    catch(Exception ex)
    {
        LogException(ex);
    }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我可能会写下面的代码:

    private async static Task<int> RegisterProductAsync(string productName)
    {
        try
        {
            await Task.Run(() => myWebService.Register(productName));
            return 0;
        }
        catch (Exception ex)
        {
            LogException();
            return 1;
        }
    }

    public async Task<int> RegisterProduct(string productName)
    {
        var result = await RegisterProductAsync(productName);
        return result;
    }

遵循规则&#39; async&#39;一路走来。

答案 1 :(得分:0)

添加服务后,我猜您知道会生成代理文件。

在代理文件中,您可以记下关联的async函数,该函数返回System.Threading.Tasks.Task<xxxxxx>作为返回值。

因此,对于Register,您可以在代理文件中记下函数RegisterAsync(string)

您可以调用该函数(在您的情况下:RegisterAsync(string))进行异步调用。

myWebService.RegisterAsync(productName);