相关疑难解决方法(0)

C#5异步/等待 - 是*并发*?

我一直在考虑C#5中新的异步内容,并提出了一个特别的问题.

我知道await关键字是一个简洁的编译器技巧/语法糖来实现连续传递,其中方法的其余部分被分解为Task对象并排队以按顺序运行,但是控制返回到调用方法.

我的问题是,我听说目前这一切都在一个线程上.这是否意味着这种异步内容实际上只是将连续代码转换为Task对象然后Application.DoEvents()在每个任务完成之后调用,然后再开始下一个任务?

或者我错过了什么?(问题的这一部分是修辞 - 我完全清楚我错过了什么 :))

c# continuations async-await

57
推荐指数
2
解决办法
9075
查看次数

为什么使用Async/Await超过正常线程或任务?

我一直在阅读很多关于异步和等待的内容,起初我没有得到它,因为我没有正确理解线程或任务.但在掌握了两者之后,我想知道:async/await如果你对线程感到满意,为什么要使用?

异步/等待的异步可以通过线程信令Thread.Join()等完成.它仅仅是为了节省编码时间和"少"麻烦吗?

.net c#

29
推荐指数
4
解决办法
9685
查看次数

C#任务线程池 - 仅跨10个线程运行100个任务

我只是想知道是否有人可以指出我关于async/await框架和线程池的正确方向?

基本上,我正在尝试做的是在单独的线程/异步中执行x个操作,但是最多y个线程.

例如,假设我有100个数据库操作: await _repository.WriteData(someData);

我想要做的是有一些方法一次运行10个这样的操作(理想情况是每个单独的线程,所以10个线程),并且每个完成后,下一个在线程上启动变得可用了.然后我们等待所有操作完成并完成所有线程......

这是否可以轻松实现而无需太多努力或增加大量复杂性?

c# multithreading async-await

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

不可等待为“即发即忘” - 使用安全吗?

我们需要在我们的代码中写一些日志。
日志是通过记录一些信息的网络请求写入的(记录器是一个 Http-API 模块),但是如果 API 中有异常,我们不想中断整个流程。

我不Task.Run用于这种操作,因为它很糟糕。

但后来我想到了 non-awaitable-inline-function ,像这样:

private static readonly HttpClient client = new HttpClient();

void Main()
{

    Console.WriteLine(1);
    async Task LogMe()
    {
        var response = await client.PostAsync("http://www.NOTEXISTS.com/recepticle.aspx", null);
        var responseString = await response.Content.ReadAsStringAsync();
        //response.EnsureSuccessStatusCode(); // I don't need this here
        Console.WriteLine("error");
    }

    //some code
    LogMe();
    //some code
    Console.WriteLine(3);

}
Run Code Online (Sandbox Code Playgroud)

输出:

1
2
Run Code Online (Sandbox Code Playgroud)

题:

它是登录“即发即忘”模式的可行解决方案吗?
如果我在这个内联方法中创建对象,它们什么时候会被 GC 处理呢?

c# async-await

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

标签 统计

c# ×4

async-await ×3

.net ×1

continuations ×1

multithreading ×1