<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>C# - 分类 - MBW Blog</title><link>https://mzbswh.github.io/blog/categories/c%23/</link><description>Bolg by mzbswh</description><generator>Hugo 0.137.1 &amp; FixIt v0.3.14</generator><language>zh-CN</language><managingEditor>mzbswh@gmail.com (mzbswh)</managingEditor><webMaster>mzbswh@gmail.com (mzbswh)</webMaster><lastBuildDate>Tue, 26 Nov 2024 12:34:08 +0800</lastBuildDate><atom:link href="https://mzbswh.github.io/blog/categories/c%23/index.xml" rel="self" type="application/rss+xml"/><item><title>Task-自定义任务</title><link>https://mzbswh.github.io/blog/posts/04_task-%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BB%BB%E5%8A%A1/</link><pubDate>Tue, 26 Nov 2024 12:34:08 +0800</pubDate><author>mzbswh@gmail.com (mzbswh)</author><guid>https://mzbswh.github.io/blog/posts/04_task-%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BB%BB%E5%8A%A1/</guid><category domain="https://mzbswh.github.io/blog/categories/c%23/">C#</category><description>&lt;div class="details admonition note open disabled">
 &lt;div class="details-summary admonition-title">&lt;i class="icon fa-fw fa-solid fa-pencil-alt" aria-hidden="true">&lt;/i>前言&lt;/div>
 &lt;div class="details-content">
 &lt;div class="admonition-content">&lt;p>本篇会研究如何在c#里实现自定义的Task, 一般来说c#默认的Task基本能实现绝大部分的异步需求, 为什么需要自定义&lt;code>Task&lt;/code>呢？&lt;/p></description></item><item><title>Task-异步与多线程</title><link>https://mzbswh.github.io/blog/posts/03_task-%E5%BC%82%E6%AD%A5%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/</link><pubDate>Fri, 22 Nov 2024 12:34:08 +0800</pubDate><author>mzbswh@gmail.com (mzbswh)</author><guid>https://mzbswh.github.io/blog/posts/03_task-%E5%BC%82%E6%AD%A5%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/</guid><category domain="https://mzbswh.github.io/blog/categories/c%23/">C#</category><description>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-c#" data-lang="c#">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">public&lt;/span> &lt;span class="k">class&lt;/span> &lt;span class="nc">AsyncTest&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">public&lt;/span> &lt;span class="kd">async&lt;/span> &lt;span class="n">Task&lt;/span> &lt;span class="n">FooAsync&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">WriteLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;ThreadId=&amp;#34;&lt;/span> &lt;span class="p">+&lt;/span> &lt;span class="n">Thread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">CurrentThread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ManagedThreadId&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">await&lt;/span> &lt;span class="n">Task&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Delay&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="m">1000&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">WriteLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;ThreadId=&amp;#34;&lt;/span> &lt;span class="p">+&lt;/span> &lt;span class="n">Thread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">CurrentThread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ManagedThreadId&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">await&lt;/span> &lt;span class="n">Task&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Delay&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="m">1000&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">WriteLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;ThreadId=&amp;#34;&lt;/span> &lt;span class="p">+&lt;/span> &lt;span class="n">Thread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">CurrentThread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ManagedThreadId&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="details admonition question open disabled">
 &lt;div class="details-summary admonition-title">&lt;i class="icon fa-fw fa-regular fa-circle-question" aria-hidden="true">&lt;/i>问题&lt;/div>
 &lt;div class="details-content">
 &lt;div class="admonition-content">&lt;p>运行上面的异步函数, 发现打印的线程id依次为:&lt;/p></description></item><item><title>Task-基本实现原理</title><link>https://mzbswh.github.io/blog/posts/0b5f289/</link><pubDate>Sun, 17 Nov 2024 19:34:08 +0800</pubDate><author>mzbswh@gmail.com (mzbswh)</author><guid>https://mzbswh.github.io/blog/posts/0b5f289/</guid><category domain="https://mzbswh.github.io/blog/categories/c%23/">C#</category><description>&lt;div class="details admonition tip open disabled">
 &lt;div class="details-summary admonition-title">&lt;i class="icon fa-fw fa-regular fa-lightbulb" aria-hidden="true">&lt;/i>前言&lt;/div>
 &lt;div class="details-content">
 &lt;div class="admonition-content">&lt;p>C#中的异步编程是一种处理长时间运行任务的方式，可以避免阻塞主线程，从而提升应用程序的响应性和性能。异步也可以使回调的写法更加简单明了和线性化, 可以避免嵌套多层的&amp;quot;回调地狱&amp;quot;。本文主要介绍异步背后的一些基本实现原理。&lt;/p></description></item><item><title>Lambda表达式-避免GC的产生</title><link>https://mzbswh.github.io/blog/posts/4e4b9ed/</link><pubDate>Mon, 11 Nov 2024 21:59:16 +0800</pubDate><author>mzbswh@gmail.com (mzbswh)</author><guid>https://mzbswh.github.io/blog/posts/4e4b9ed/</guid><category domain="https://mzbswh.github.io/blog/categories/c%23/">C#</category><description>&lt;div class="details admonition question open disabled">
 &lt;div class="details-summary admonition-title">&lt;i class="icon fa-fw fa-regular fa-circle-question" aria-hidden="true">&lt;/i>问题背景&lt;/div>
 &lt;div class="details-content">
 &lt;div class="admonition-content">&lt;p>在c#中使用Lambda表达式是很常见的，但是某些情形下Lambda表达可能导致大量的GC产生, 怎么在c#正确的使用Lambda表达式以避免产生过多的GC呢？&lt;/p>
&lt;/div>
 &lt;/div>
&lt;/div>&lt;h3 id="案例1" class="heading-element">&lt;span>案例1&lt;/span>
 &lt;a href="#%e6%a1%88%e4%be%8b1" class="heading-mark">
 &lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true">&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z">&lt;/path>&lt;/svg>
 &lt;/a>
&lt;/h3>&lt;div class="details admonition example open disabled">
 &lt;div class="details-summary admonition-title">&lt;i class="icon fa-fw fa-solid fa-list-ul" aria-hidden="true">&lt;/i>没有捕获任何外部变量&lt;/div>
 &lt;div class="details-content">
 &lt;div class="admonition-content">&lt;p>&lt;/div>
 &lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">public&lt;/span> &lt;span class="k">class&lt;/span> &lt;span class="nc">LambdaTest&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">public&lt;/span> &lt;span class="k">void&lt;/span> &lt;span class="n">Foo&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Func&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">func&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="p">+&lt;/span> &lt;span class="m">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;em>&lt;strong>编译生成的IL等效c#代码&lt;/strong>&lt;/em>&lt;/p></description></item></channel></rss>