繁体   English   中英

WCF异步操作+ IO操作

[英]WCF Async Operation + IO Operation

使用异步CTP编写以下WCF服务操作的优点是什么?

Task.Factory.StartNew是否会在longRunningIOOperation的持续时间内阻塞线程池线程?

    public Task<string> SampleMethodAsync(string msg)
    {
        return await Task.Factory.StartNew(() =>
        {
            return longRunningIOOperation();
        });
    }

有没有更好的方法可以编写此代码,以便我们利用IO完成线程?

您还需要使longRunningIOOperation成为异步操作。 只要代码中的任何操作都阻塞了线程,就会阻塞某个线程,无论是线程池还是调用您的操作的线程池。 如果您的操作是异步的,则可以编写类似于以下代码的内容。

public Task<string> SampleMethodAsync(string msg)
{
    var tcs = new TaskCompletionSource<string>();
    longRunningIOOperationAsync().ContinueWith(task =>
    {
        tcs.SetResult(task.Result);
    });
    return tcs.Task;
}

最后,我弄清楚了它是如何工作的。 我安装了.net FX4.5,一切正常。

在我的情况下,服务A会像这样呼叫服务B。

public class ServiceA : IServiceA
{
    public async Task<string> GetGreeting(string name)
    {
        ServiceBClient client = new ServiceBClient();
        return await client.GetGreetingAsync();
    }
}

client.GetGreetingAsync()需要10秒钟来处理。 我的理解是服务不会通过调用GetGreetingAsync()来阻止请求线程。

您能否解释一下WCF在后台如何实现此目的,或向我提供一些文档以从WCF的角度理解所有这些工作原理?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM