首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Microsoft异步框架的基础知识

使用Microsoft异步框架的基础知识
EN

Stack Overflow用户
提问于 2012-01-04 18:05:22
回答 2查看 711关注 0票数 5

使用Visual Studio Async CTP (版本3),我正在努力理解如何使用此框架“包装”现有代码。

例如

我正在尝试使用OpenPop.NET库建立与pop3服务器的连接,并确认我拥有有效的用户名和密码。

假设我有一些这样的代码。

代码语言:javascript
复制
    public bool ConnectSync()
    {
        bool success = true;
        Pop3Client client = new Pop3Client();

        try
        {
            client.Connect("mail.server.com", 110, false);
            client.Authenticate("username", "password");
        }
        catch
        {
            success = false;
        }
        return success;
    }

现在,我想让它与我读到的和拼凑在一起的东西的理解不同步,那就是我最终会得到如下的方法签名:

代码语言:javascript
复制
    public async Task<bool> ConnectAsync()
    {

    }

我相信这是正确的签名,因为它是一个返回布尔值(?)的任务。我猜我将需要使用TaskEx.Run()方法?但这就是我能想到的最远的地方。有人能指出正确的方向吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-04 18:10:30

是的,到目前为止你是对的。

正如您所说,转换方法的简单方法是将其包装在TaskEx.Run中,这样方法就可以在线程池线程上运行,而不会阻塞您的UI线程。

代码语言:javascript
复制
public Task<bool> ConnectAsync()
{
    return TaskEx.Run( () =>
        {
            bool success = true;
            Pop3Client client = new Pop3Client();

            try
            {
                client.Connect("mail.server.com", 110, false);
                client.Authenticate("username", "password");
            }
            catch
            {
                success = false;
            }
            return success;
        }
    );
}
票数 3
EN

Stack Overflow用户

发布于 2012-01-04 18:11:01

从根本上说,为了从异步CTP中获得最大的好处,您可以一直使用异步呼叫。您可以非常轻松地将同步ConnectSync方法包装在任务中,而无需使用async CTP:

代码语言:javascript
复制
// Note: not an async method in itself
public Task<bool> ConnectAsync()
{
    return Task.Factory.StartNew<bool>(ConnectSync);
}

(您可能不需要在这里指定类型参数-我永远记不住使用方法组转换进行类型推断的确切规则。)

尽管如此,它仍然会在线程连接时占用线程。如果你对此没有意见,那么至少你最终会得到一个方法,你可以从异步方法中调用并适当地等待。如果没有其他东西,这将允许您使用异步向上构建应用程序的其余部分,然后如果/当POP3代码支持异步时,您可以将ConnectAsync重写为异步方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8725014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档