как вызвать EndInvoke в асинхронном методе - PullRequest
1 голос
/ 17 января 2012

У меня есть нормальный метод

public List<string> FindNearByCity(string targetCity)
{
// ... some implementation
}

Я хочу добавить асинхронную поддержку для этого метода, поэтому я написал следующее:

public IAsyncResult BeginFindNearByCity(string targetCity, AsyncCallback callback, object obj)
{
    Func<string, List<string>> method = FindNearByCity;
    return method.BeginInvoke(targetCity, callback, obj);
}

public List<string> EndFindNearByCity(IAsyncResult  result)
{
    Func<string, List<string>> method = FindNearByCity;
    return method.EndInvoke(result);
}

BeginFindNearByCity работает нормально, однако, когда это происходитEndFindNearByCity, исключение будет выдаваться при попадании в EndInvoke.

Я смотрю на метод автоматического генерирования асинхронных веб-сервисов, кажется, мне нужно реализовать что-то, вызывая "ChannelBase"

Может кто-нибудь указать мне на что-точто более простое, как учебник или пример, на который я могу взглянуть?

Спасибо

1 Ответ

3 голосов
/ 17 января 2012

Делегат, который вы создаете в своем методе EndXXX, является отдельным экземпляром для делегата, который вы создаете в своем методе BeginXXX, поэтому он не знает о IAsyncResult, который вы передаете его методу EndInvoke().

Вы должны использовать тот же делегат в методе EndXXX, что и метод BeginXXX, например,

public class Foo
{
    private readonly Func<string, List<string>> method;

    public Foo()
    {
        this.method = this.FindNearByCity;
    }

    public IAsyncResult BeginFindNearByCity(string targetCity, AsyncCallback callback, object obj)
    {
        return this.method.BeginInvoke(targetCity, callback, obj);
    }

    public List<string> EndFindNearByCity(IAsyncResult  result)
    {
        return this.method.EndInvoke(result);
    }

    public List<string> FindNearByCity(string targetCity)
    {
        // ... some implementation
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...