小编Bj *_*icz的帖子

异步方法不返回asp.net mvc 4

我遇到了我实现的异步方法的问题.该方法基本上对资源进行HttpRequest,并在请求成功时反序列化字符串.我为该方法编写了一个测试,它可以工作.但是当我从控制器调用它时,该方法永远不会返回?

    public async Task<IEnumerable<T>> Get()
    {
        try
        {
            var resourceSegmentUri = new Uri(_uri, UriKind.Relative);

            var response = await _client.GetAsync(resourceSegmentUri);

            if (response.IsSuccessStatusCode)
            {
                var submission = await response.Content.ReadAsStringAsync();
                return JsonConvert.DeserializeObject<IEnumerable<T>>(submission);
            }

            if (response.Content != null)
            {
                var message = response.Content.ReadAsStringAsync();
                throw new WebException(message.Result, (WebExceptionStatus)response.StatusCode);
            }

        }
        catch (WebException e)
        {
            Logger.Error("GET Request failed with status: {0}", e.Status);
            throw;
        }

        throw new Exception();
    }
Run Code Online (Sandbox Code Playgroud)

永不返回的代码:

public ActionResult Index()
{
   var api = new Api();
   var test = api.Get().Result; //Never returns
   return View(); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asynchronous

8
推荐指数
1
解决办法
3080
查看次数

scrapy管道返回延迟的整合测试

是否可以创建scrapy-pipeline的集成测试?我无法弄清楚如何做到这一点.特别是我正在尝试为FilesPipeline编写一个测试,我也希望它能够将我的模拟响应持久化到Amazon S3.

这是我的测试:

def _mocked_download_func(request, info):
    return Response(url=response.url, status=200, body="test", request=request)

class FilesPipelineTests(unittest.TestCase):

    def setUp(self):
        self.settings = get_project_settings()
        crawler = Crawler(self.settings)
        crawler.configure()
        self.pipeline = FilesPipeline.from_crawler(crawler)
        self.pipeline.open_spider(None)
        self.pipeline.download_func = _mocked_download_func

    @defer.inlineCallbacks
    def test_file_should_be_directly_available_from_s3_when_processed(self):
        item = CrawlResult()
        item['id'] = "test"
        item['file_urls'] = ['http://localhost/test']
        result = yield self.pipeline.process_item(item, None)
        self.assertEquals(result['files'][0]['path'], "full/002338a87aab86c6b37ffa22100504ad1262f21b")
Run Code Online (Sandbox Code Playgroud)

我总是遇到以下错误:

DirtyReactorAggregateError: Reactor was unclean.
Run Code Online (Sandbox Code Playgroud)

如何使用扭曲和scrapy创建适当的测试?

twisted nose scrapy python-2.7

6
推荐指数
1
解决办法
409
查看次数

Amazon S3 检查文件是否完全上传

我有两个服务,一个以异步方式上传到 S3,第二个服务是后处理器,它对上传的文件进行一些额外的处理。

我遇到的问题是,当在第二个服务中请求文件的速度太快时,S3 客户端会认为该文件存在,因为密钥存在,但整个文件尚未上传,因此会引发异常。

如果我执行阻止上传,它可以工作,但性能很差。

有没有办法检查文件是否已完全上传到 S3?

.net amazon-s3 amazon-web-services

6
推荐指数
1
解决办法
3543
查看次数

共享HttpClient阻止异步请求

我遇到了HttpClient和异步请求的问题.基本上我有一个异步方法,即使用在ctor中初始化的共享HttpClient创建异步请求.

我的问题是,当以异步方式调用我的方法时,似乎HttpClient阻塞.

这是我的调用代码:

var tasks = trips.Select(u => api.Animals.GetAsync(u * 100, 100).ContinueWith(t =>
        {
            lock (animals)
            {
                if (t.Result != null)
                {
                    foreach (var a in t.Result)
                    {
                        animals.Add(a);
                    }
                }
            }
        }));
        await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

以下是使用共享HttpClient阻塞的方法:

 //HttpClient blocks on each request
                var uri = String.Format("animals?take={0}&from={1}", take, from);
                var resourceSegmentUri = new Uri(uri, UriKind.Relative);

                var response = await _client.GetAsync(resourceSegmentUri);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();

                    var animals = JsonConvert.DeserializeObject<T>(content);

                    return animals;
                }
Run Code Online (Sandbox Code Playgroud)

当为每个请求使用客户端时,此代码段不会阻止:

using (var client = new HttpClient(){BaseAddress …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading asynchronous

5
推荐指数
1
解决办法
694
查看次数

从不同来源聚合/收集的设计模式

当您将来自不同来源的信息收集到您自己的通用模型中时,您应该使用哪种设计模式?

一个例子可能是将来自不同视频流服务的视频轮询到一个通用模型中。换句话说,每个视频流服务都有自己的 Video 对象表示,具有不同的属性集。所以你想收集这些不同的构造并将它们聚合成一个通用的 Video 对象。

是否有一些众所周知的设计模式可以让我们使用?我所做的是为每个 API 建立一个工厂,负责从 api 模型中创建通用模型。这是一个好方法吗?

c# oop design-patterns

2
推荐指数
1
解决办法
1544
查看次数