<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>csharp on MU</title><link>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/</link><description>Recent content in csharp on MU</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 30 Aug 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/index.xml" rel="self" type="application/rss+xml"/><item><title>Task 的使用技巧</title><link>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/task_skill/</link><pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate><guid>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/task_skill/</guid><description>描述 使用 Task 时，有几个技巧可以帮助你更高效地进行并行编程：
使用 Task.Run 来简化任务创建：对于简单的后台工作，Task.Run 是最便捷的方式，它自动使用线程池，并简化了任务创建。
利用 async 和 await：结合 async 和 await 关键字来处理异步操作，使代码更易于阅读和维护，同时避免了回调地狱。
处理异常：使用 try-catch 块来捕获 await 异步操作中的异常，或者在 Task.ContinueWith 中处理任务的异常，以避免未处理的异常导致程序崩溃。
任务取消：使用 CancellationToken 来支持任务的取消操作。创建任务时，传递一个 CancellationToken，并在任务内部检查该 token，以便在需要时中断任务。
任务组合：使用 Task.WhenAll 和 Task.WhenAny 来等待多个任务的完成或处理第一个完成的任务。这对并发操作非常有用。
避免长时间运行的任务：尽量将长时间运行的任务拆分为多个较短的任务，以避免阻塞线程池中的线程，影响其他任务的执行。
使用 Task.Run 和 ConfigureAwait(false)：在不需要恢复到原始上下文的情况下，使用 ConfigureAwait(false) 来提高性能，特别是在库或服务中，避免不必要的上下文切换。
通过这些技巧，你可以更高效地使用 Task 来编写异步、并行的代码，并提升程序的性能和响应性</description></item><item><title>Task 和 Thread 的关系</title><link>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/task_diff_thread/</link><pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate><guid>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/task_diff_thread/</guid><description>描述 Task 和 Thread 都用于并行编程，但它们有不同的特性和用途：
抽象层次：Thread 是底层的线程管理类，直接操作线程。Task 是更高级的抽象，提供了对线程的封装，并支持异步编程模型。
资源管理：Task 通常使用线程池来管理和复用线程资源，减少了线程创建和销毁的开销。Thread 是直接创建和管理的，每个线程都需要独立的资源，可能会导致性能问题。
编程模型：Task 提供了更简洁的编程模型，支持任务链、异常处理、取消等功能。Thread 需要手动管理这些方面，代码较为繁琐。
调度：Task 由 TaskScheduler 调度，支持任务优先级和调度策略。Thread 由操作系统调度，缺乏灵活性。
总的来说，Task 提供了更高层次的并行编程支持，更适合大多数现代应用，而 Thread 提供了对线程的直接控制，适合需要精细化线程管理的场景。
Task 的一些使用技巧对 Thread 的封装</description></item><item><title>Task.Run() 和 Task.Factory.StartNew() 的区别</title><link>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/task_and_taskfactory/</link><pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate><guid>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/task_and_taskfactory/</guid><description>描述 Task.Run 和 Task.Factory.StartNew 都用于创建和启动任务，但它们有一些区别：
默认行为：Task.Run 是 Task.Factory.StartNew 的一个简化版本，通常使用默认的 TaskCreationOptions 和 TaskScheduler。Task.Factory.StartNew 提供了更多的配置选项。
配置选项：Task.Factory.StartNew 允许你设置更多的参数，比如 TaskCreationOptions 和 TaskScheduler。而 Task.Run 是为了简化任务创建，默认使用 TaskCreationOptions.DenyChildAttach 和当前线程的调度器。
延续性：Task.Run 的延续性（ContinueWith）可以更简单地处理，因为它默认使用线程池来执行任务，适用于大多数常见的并行处理场景。
综上所述，如果你需要更多控制和配置，可以使用 Task.Factory.StartNew；而如果只是需要简单地创建和启动一个任务，Task.Run 是更方便的选择
TaskCreationOptions TaskScheduler</description></item><item><title>从 Task 到 Thread</title><link>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/from_task_to_thread/</link><pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate><guid>https://choy-mutao.github.io/%E5%8D%9A%E5%AE%A2_60/csharp/taskthread/from_task_to_thread/</guid><description>描述</description></item></channel></rss>