Завершить асинхронный запрос начала извне

Я уже искал много вопросов и ответов, но все еще не смог решить проблему.

CancellationTokenSource не работает для меня, потому что любой метод cancellationtokensource завершает асинхронный запрос в рамках асинхронного метода. Не снаружи.

Позвольте мне расширить то, что я хочу вам сказать;

У меня есть метод REST гамака, который асинхронно передает Twitter для любых твитов, как показано ниже:

IAsyncResult asyncServ = service.StreamFilter((streamEvent, response) =>
            {
                if (streamEvent == null && response != null && response.StatusCode != 0)
                {
                    string logDesc = String.Format("Failed to Stream {0}:{1}", obj.Keyword, response.Response);
                    methods.CreateLog(ClassLibrary.LogType.Error, ClassLibrary.LogSource.TweetKeywordStreamService, logDesc, null);
                }
                else if (response == null || streamEvent == null)
                {
                    methods.CreateLog(ClassLibrary.LogType.Error, ClassLibrary.LogSource.TweetKeywordStreamService, "Failed to Stream: " + obj.Keyword, null);
                }
                else if (response.StatusCode == 0)
                {
                    Task objSaver = new Task(() =>
                    {
                        SaveStreamTweet(streamEvent, obj.Id, obj.Keyword);
                    });

                    objSaver.Start();
                }
                else
                {
                    methods.CreateLog(ClassLibrary.LogType.Error, ClassLibrary.LogSource.TweetKeywordStreamService, "Possibly failed to Stream: " + obj.Keyword, null);
                }

            }, obj.Keyword, obj.Follow);

Этот метод срабатывает только при получении твита. Поэтому, если я использую токен отмены в методе Stream Filter, мне нужно дождаться срабатывания твита , и только тогда мой блок кода заработает.

Я хочу завершить эту службу за пределами блока кода потокового фильтра.

Вот как работает метод StreamFilter, он создает и возвращает асинхронный начальный запрос с типом IAsyncResult.(На самом деле этот вызов срабатывает только при получении твита)

return client.BeginRequest(request, new RestCallback<T>((req, resp, state) =>
        {
            Exception exception;
            var entity = TryAsyncResponse(() => 
                    {

                        SetResponse(resp);

                        JsonSerializer serializer = new JsonSerializer();
                        var retEntity = serializer.Deserialize<T>(resp);
                        return retEntity;
                     },
                    out exception);
            action(entity, new TwitterResponse(resp, exception));
        }));

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

Не удалось использовать метод EndRequest, потому что он выдает ошибку.

заранее спасибо

0 ответов

Другие вопросы по тегам