{"id":1662,"date":"2024-12-16T16:59:48","date_gmt":"2024-12-16T07:59:48","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1662"},"modified":"2025-03-24T08:50:12","modified_gmt":"2025-03-23T23:50:12","slug":"c-async-await%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3%e3%82%b9%e3%82%92%e6%9c%80%e5%a4%a7%e5%8c%96%e3%81%99%e3%82%8b7%e3%81%a4","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1662","title":{"rendered":"C# async\/await\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b7\u3064\u306e\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">\u306f\u3058\u3081\u306b<\/a>  <\/li>  <li>    <a href=\"#i-1\">async\/await\u3068\u306f\uff1a\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-2\">\u540c\u671f\u51e6\u7406\u3068\u975e\u540c\u671f\u51e6\u7406\u306e\u9055\u3044\u3092\u7406\u89e3\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u306a\u305cC#\u3067async\/await\u304c\u5fc5\u8981\u306a\u306e\u304b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">async\/await\u306e\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">async\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u6b63\u3057\u3044\u4f7f\u3044\u65b9<\/a>      <\/li>      <li>        <a href=\"#i-6\">await\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3088\u308b\u975e\u540c\u671f\u51e6\u7406\u306e\u5236\u5fa1<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u623b\u308a\u5024\u306e\u578b\uff08Task, Task&lt;T&gt;, ValueTask\uff09\u306e\u4f7f\u3044\u5206\u3051<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b7\u3064\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">1: ConfigureAwait\u306e\u9069\u5207\u306a\u4f7f\u7528<\/a>      <\/li>      <li>        <a href=\"#i-11\">2: \u4e26\u5217\u51e6\u7406\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a<\/a>      <\/li>      <li>        <a href=\"#i-12\">3: \u30ad\u30e3\u30f3\u30bb\u30ec\u30fc\u30b7\u30e7\u30f3\u30c8\u30fc\u30af\u30f3\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-13\">4: \u4f8b\u5916\u51e6\u7406\u306e\u6700\u9069\u5316<\/a>      <\/li>      <li>        <a href=\"#i-14\">5: \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u524a\u6e1b\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-15\">6: \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">7: ValueTask\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5b9f\u88c5\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">WebAPI\u3067\u306e\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-19\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u975e\u540c\u671f\u5316<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3067\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-21\">async\/await\u306e\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u3068\u56de\u907f\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">\u975e\u540c\u671f\u51e6\u7406\u306e\u9023\u9396\u306b\u3088\u308b\u6027\u80fd\u4f4e\u4e0b<\/a>      <\/li>      <li>        <a href=\"#i-25\">\u4f8b\u5916\u51e6\u7406\u306e\u8aa4\u3063\u305f\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-28\">\u4e0d\u9069\u5207\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5207\u308a\u66ff\u3048<\/a>      <\/li>      <li>        <a href=\"#i-31\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-32\">\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-35\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u3068\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-36\">\u975e\u540c\u671f\u51e6\u7406\u306e\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u7279\u5b9a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-37\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584\u306e\u305f\u3081\u306e\u8a08\u6e2c\u3068\u6700\u9069\u5316<\/a>      <\/li>      <li>        <a href=\"#i-38\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-39\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u7d50\u679c\u306e\u5206\u6790<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-41\">async\/await\u306e\u307e\u3068\u3081<\/a>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u306f\u3058\u3081\u306b<\/h2>\n\n\n\n<p>C#\u306easync\/await\u306f\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u7c21\u6f54\u306b\u5b9f\u88c5\u3067\u304d\u308b\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3059\u304c\u3001\u9069\u5207\u306a\u4f7f\u7528\u65b9\u6cd5\u3092\u7406\u89e3\u3057\u3066\u3044\u306a\u3044\u3068\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u4f4e\u4e0b\u3084\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306a\u3069\u306e\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<br>\u672c\u8a18\u4e8b\u3067\u306f\u3001async\/await\u306e\u57fa\u790e\u304b\u3089\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u3001\u305d\u3057\u3066\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u307e\u3067\u3001\u4f53\u7cfb\u7684\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u672c\u8a18\u4e8b\u3067\u5b66\u3079\u308b\u3053\u3068<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<p class=\"is-style-sango-paragraph-idea-alt\">\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u672c\u6982\u5ff5\u3068 async\/await \u306e\u4ed5\u7d44\u307f<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">Task, Task&lt;T&gt;, ValueTask \u306e\u9069\u5207\u306a\u4f7f\u3044\u5206\u3051\u65b9<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b\u305f\u3081\u306e7\u3064\u306e\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">WebAPI\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3067\u306e\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u3088\u304f\u3042\u308b\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u3068\u305d\u306e\u56de\u907f\u65b9\u6cd5<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u3068\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u5177\u4f53\u7684\u306a\u624b\u6cd5<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">async\/await\u3068\u306f\uff1a\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u540c\u671f\u51e6\u7406\u3068\u975e\u540c\u671f\u51e6\u7406\u306e\u9055\u3044\u3092\u7406\u89e3\u3059\u308b<\/h3>\n\n\n\n<p>\u540c\u671f\u51e6\u7406\u3068\u975e\u540c\u671f\u51e6\u7406\u306e\u9055\u3044\u306f\u3001\u30bf\u30b9\u30af\u306e\u5b9f\u884c\u65b9\u6cd5\u3068\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5236\u5fa1\u30d5\u30ed\u30fc\u306b\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u5177\u4f53\u7684\u306b\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-box sng-box box6\">\n<p><strong>\u540c\u671f\u51e6\u7406\u306e\u7279\u5fb4<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u51e6\u7406\u304c\u9806\u756a\u306b\u5b9f\u884c\u3055\u308c\u308b<\/li>\n\n\n\n<li>\u73fe\u5728\u306e\u51e6\u7406\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u3001\u6b21\u306e\u51e6\u7406\u306f\u5f85\u6a5f\u72b6\u614b<\/li>\n\n\n\n<li>\u30e1\u30a4\u30f3\u30b9\u30ec\u30c3\u30c9\u304c\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b<\/li>\n\n\n\n<li>\u30b7\u30f3\u30d7\u30eb\u3067\u7406\u89e3\u3057\u3084\u3059\u3044<\/li>\n<\/ul>\n\n\n\n<p><strong>\u975e\u540c\u671f\u51e6\u7406\u306e\u7279\u5fb4<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u306e\u51e6\u7406\u3092\u4e26\u884c\u3057\u3066\u5b9f\u884c\u53ef\u80fd<\/li>\n\n\n\n<li>\u5f85\u6a5f\u6642\u9593\u3092\u6709\u52b9\u6d3b\u7528\u3067\u304d\u308b<\/li>\n\n\n\n<li>UI\u306e\u5fdc\u7b54\u6027\u304c\u5411\u4e0a\u3059\u308b<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u4f7f\u7528\u304c\u53ef\u80fd<\/li>\n<\/ul>\n<\/div>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u4f8b\u3067\u3001\u540c\u671f\u51e6\u7406\u3068\u975e\u540c\u671f\u51e6\u7406\u306e\u9055\u3044\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u540c\u671f\u51e6\u7406\u306e\u4f8b\npublic string DownloadDataSync(string url)\n{\n    \/\/ \u3053\u306e\u51e6\u7406\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u3053\u3053\u3067\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\n    using (var client = new WebClient())\n    {\n        return client.DownloadString(url);\n    }\n}\n\n\/\/ \u975e\u540c\u671f\u51e6\u7406\u306e\u4f8b\npublic async Task&lt;string&gt; DownloadDataAsync(string url)\n{\n    \/\/ \u975e\u540c\u671f\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3001\u5b8c\u4e86\u3092\u5f85\u6a5f\n    \/\/ \u3053\u306e\u9593\u3001\u4ed6\u306e\u51e6\u7406\u3092\u5b9f\u884c\u53ef\u80fd\n    using (var client = new HttpClient())\n    {\n        return await client.GetStringAsync(url);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u306a\u305cC#\u3067async\/await\u304c\u5fc5\u8981\u306a\u306e\u304b<\/h3>\n\n\n\n<p>async\/await\u304c\u5fc5\u8981\u3068\u306a\u308b\u4e3b\u306a\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-box sng-box box6\">\n<ol class=\"wp-block-list is-style-sango-list-simple\">\n<li><strong>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u5411\u4e0a<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-simple\">\n<li>UI\u30b9\u30ec\u30c3\u30c9\u306e\u30d6\u30ed\u30c3\u30ad\u30f3\u30b0\u3092\u9632\u304e\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u3092\u7dad\u6301<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30fc\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u306e\u5411\u4e0a<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-simple\">\n<li>\u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u5229\u7528<\/li>\n\n\n\n<li>\u540c\u6642\u63a5\u7d9a\u6570\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u30b9\u30ec\u30c3\u30c9\u30d7\u30fc\u30eb\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-simple\">\n<li>\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u9023\u9396\uff08\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u5730\u7344\uff09\u306e\u56de\u907f<\/li>\n\n\n\n<li>\u540c\u671f\u30b3\u30fc\u30c9\u306b\u8fd1\u3044\u66f8\u304d\u65b9\u3067\u975e\u540c\u671f\u51e6\u7406\u3092\u5b9f\u88c5\u53ef\u80fd<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u7c21\u7d20\u5316<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div>\n\n\n\n<p>\u4ee5\u4e0b\u306f\u3001WebAPI\u3067\u306e\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u975e\u540c\u671f\u51e6\u7406\u3092\u6d3b\u7528\u3057\u305fWebAPI\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u4f8b\npublic class ProductController : ApiController\n{\n    private readonly IProductRepository _repository;\n\n    public ProductController(IProductRepository repository)\n    {\n        _repository = repository;\n    }\n\n    \/\/ \u975e\u540c\u671f\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u88c5\n    public async Task&lt;IHttpActionResult&gt; GetProductAsync(int id)\n    {\n        try\n        {\n            \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u306e\u975e\u540c\u671f\u8aad\u307f\u53d6\u308a\n            var product = await _repository.GetProductByIdAsync(id);\n            if (product == null)\n            {\n                return NotFound();\n            }\n\n            return Ok(product);\n        }\n        catch (Exception ex)\n        {\n            \/\/ \u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u975e\u540c\u671f\u8a18\u9332\n            await LogErrorAsync(ex);\n            return InternalServerError();\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u3068\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u8a18\u9332\u3092\u975e\u540c\u671f\u3067\u884c\u3046\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u975e\u540c\u671f\u51e6\u7406\u3067\u306e\u30e1\u30ea\u30c3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<p class=\"is-style-sango-paragraph-good-alt\">\u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u5229\u7528<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-good-alt\">\u591a\u6570\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u540c\u6642\u306b\u51e6\u7406\u53ef\u80fd<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-good-alt\">\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u4e00\u8cab\u6027\u7dad\u6301<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-good-alt\">\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a<\/p>\n<\/div><\/div>\n\n\n\n<p>async\/await\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3053\u308c\u3089\u306e\u5229\u70b9\u3092\u7c21\u6f54\u306a\u30b3\u30fc\u30c9\u3067\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<br>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001async\/await\u306e\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">async\/await\u306e\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001async\/await\u306e\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3001\u5b9f\u8df5\u7684\u306a\u4f8b\u3092\u4ea4\u3048\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">async\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u6b63\u3057\u3044\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u790e\u3068\u306a\u308basync\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u4f7f\u7528\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u975e\u540c\u671f\u30e1\u30bd\u30c3\u30c9\u306e\u5b9a\u7fa9\npublic async Task ProcessDataAsync(Data data)\n{\n    \/\/ \u975e\u540c\u671f\u51e6\u7406\u3092\u5b9f\u88c5\n    await Task.Delay(100); \/\/ \u4f8b\u793a\u7528\u306e\u9045\u5ef6\n    await ProcessInternalAsync(data);\n}\n\n\/\/ \u5024\u3092\u8fd4\u3059\u975e\u540c\u671f\u30e1\u30bd\u30c3\u30c9\npublic async Task&lt;Result&gt; GetResultAsync()\n{\n    var data = await FetchDataAsync();\n    return new Result { Data = data };\n}\n\n\/\/ \u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u30fc\u3067\u306e\u4f7f\u7528\n\/\/ \u6ce8\u610f: async void\u306f\u901a\u5e38\u907f\u3051\u308b\u3079\u304d\u3060\u304c\u3001\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u30fc\u306f\u4f8b\u5916\nprivate async void Button_Click(object sender, EventArgs e)\n{\n    try\n    {\n        await ProcessDataAsync(new Data());\n    }\n    catch (Exception ex)\n    {\n        \/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n        MessageBox.Show(ex.Message);\n    }\n}<\/pre>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u91cd\u8981\u306a\u5b9f\u88c5\u898f\u5247<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list\">\n<li>\u30e1\u30bd\u30c3\u30c9\u540d\u306b\u306f\u201dAsync\u201d\u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u4ed8\u3051\u308b<\/li>\n\n\n\n<li>\u623b\u308a\u5024\u306f\u901a\u5e38Task\/Task&lt;T&gt;\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>void\u623b\u308a\u5024\u306f\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u30fc\u306e\u307f\u306b\u5236\u9650<\/li>\n\n\n\n<li>\u4f8b\u5916\u51e6\u7406\u3092\u9069\u5207\u306b\u5b9f\u88c5<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">await\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3088\u308b\u975e\u540c\u671f\u51e6\u7406\u306e\u5236\u5fa1<\/h3>\n\n\n\n<p>await\u5f0f\u306e\u6b63\u3057\u3044\u4f7f\u7528\u65b9\u6cd5\u3068\u3001\u52b9\u7387\u7684\u306a\u975e\u540c\u671f\u51e6\u7406\u306e\u5236\u5fa1\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class AsyncOperationController\n{\n    \/\/ \u8907\u6570\u306e\u975e\u540c\u671f\u64cd\u4f5c\u306e\u5236\u5fa1\n    public async Task ProcessMultipleOperationsAsync()\n    {\n        \/\/ \u9806\u6b21\u5b9f\u884c\u304c\u5fc5\u8981\u306a\u5834\u5408\n        var result1 = await Operation1Async();\n        var result2 = await Operation2Async(result1);\n\n        \/\/ \u4e26\u5217\u5b9f\u884c\u304c\u53ef\u80fd\u306a\u5834\u5408\n        var task1 = Operation3Async();\n        var task2 = Operation4Async();\n        await Task.WhenAll(task1, task2);\n\n        \/\/ \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u4ed8\u304d\u306e\u5b9f\u884c\n        using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));\n        try\n        {\n            await TimeoutSensitiveOperationAsync(cts.Token);\n        }\n        catch (OperationCanceledException)\n        {\n            \/\/ \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u51e6\u7406\n        }\n    }\n\n    \/\/ \u9032\u6357\u5831\u544a\u4ed8\u304d\u306e\u975e\u540c\u671f\u51e6\u7406\n    public async Task ProcessWithProgressAsync(IProgress&lt;int&gt; progress)\n    {\n        for (int i = 0; i &lt; 100; i += 10)\n        {\n            await Task.Delay(100); \/\/ \u9032\u6357\u306e\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n            progress?.Report(i);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u623b\u308a\u5024\u306e\u578b\uff08Task, Task&lt;T&gt;, ValueTask\uff09\u306e\u4f7f\u3044\u5206\u3051<\/h3>\n\n\n\n<p>\u5404\u623b\u308a\u5024\u578b\u306e\u7279\u5fb4\u3068\u9069\u5207\u306a\u4f7f\u7528\u5834\u9762\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ReturnTypeExamples\n{\n    private readonly Dictionary&lt;string, int&gt; _cache = new();\n\n    \/\/ Task: \u5024\u3092\u8fd4\u3055\u306a\u3044\u975e\u540c\u671f\u51e6\u7406\n    public async Task UpdateDataAsync()\n    {\n        await Task.Delay(100);\n        \/\/ \u30c7\u30fc\u30bf\u66f4\u65b0\u51e6\u7406\n    }\n\n    \/\/ Task&lt;T&gt;: \u5024\u3092\u8fd4\u3059\u6a19\u6e96\u7684\u306a\u975e\u540c\u671f\u51e6\u7406\n    public async Task&lt;int&gt; CalculateAsync(int input)\n    {\n        await Task.Delay(100);\n        return input * 2;\n    }\n\n    \/\/ ValueTask: \u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u6642\u306b\u5272\u308a\u5f53\u3066\u3092\u524a\u6e1b\n    public ValueTask&lt;int&gt; GetValueAsync(string key)\n    {\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u6642\u306f\u540c\u671f\u7684\u306b\u8fd4\u5374\n        if (_cache.TryGetValue(key, out int value))\n        {\n            return new ValueTask&lt;int&gt;(value);\n        }\n\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u6642\u306f\u975e\u540c\u671f\u306b\u53d6\u5f97\n        return new ValueTask&lt;int&gt;(LoadValueAsync(key));\n    }\n\n    \/\/ ValueTask\u306e\u9ad8\u5ea6\u306a\u4f7f\u7528\u4f8b\n    private readonly ValueTask&lt;int&gt; _completedTask = \n        new ValueTask&lt;int&gt;(42);\n\n    public ValueTask&lt;int&gt; GetCachedValueAsync()\n    {\n        return _completedTask; \/\/ \u4e8b\u524d\u306b\u4f5c\u6210\u3057\u305fValueTask\u3092\u518d\u5229\u7528\n    }\n\n    private async Task&lt;int&gt; LoadValueAsync(string key)\n    {\n        await Task.Delay(100); \/\/ \u5916\u90e8\u30ea\u30bd\u30fc\u30b9\u304b\u3089\u306e\u53d6\u5f97\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        var value = await ComputeValueAsync(key);\n        _cache[key] = value;\n        return value;\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">\u623b\u308a\u5024\u578b\u306e\u9078\u629e\u57fa\u6e96<\/h4>\n\n\n<div id=\"id-05b6f986-0fb7-488f-b36d-dfd51f34016f\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u578b<\/th><th>\u4f7f\u7528\u5834\u9762<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><th>\u30c7\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>Task<\/td><td>\u5024\u3092\u8fd4\u3055\u306a\u3044\u975e\u540c\u671f\u51e6\u7406<\/td><td>\u4e00\u822c\u7684\u3067\u7406\u89e3\u3057\u3084\u3059\u3044<\/td><td>\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u304c\u5fc5\u8981<\/td><\/tr><tr><td>Task&lt;T&gt;<\/td><td>\u5024\u3092\u8fd4\u3059\u975e\u540c\u671f\u51e6\u7406<\/td><td>\u578b\u5b89\u5168\u6027\u304c\u9ad8\u3044<\/td><td>\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u304c\u5fc5\u8981<\/td><\/tr><tr><td>ValueTask<\/td><td>\u9ad8\u983b\u5ea6\u3067\u540c\u671f\u7684\u306b\u5b8c\u4e86\u3059\u308b\u51e6\u7406<\/td><td>\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u306e\u524a\u6e1b<\/td><td>\u518d\u5229\u7528\u306b\u5236\u9650\u3042\u308a<\/td><\/tr><tr><td>ValueTask&lt;T&gt;<\/td><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u304c\u9ad8\u3044\u51e6\u7406<\/td><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5411\u4e0a<\/td><td>\u5b9f\u88c5\u304c\u8907\u96d1\u5316<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306a\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u790e\u304c\u7bc9\u3051\u307e\u3059\u3002<br>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u3092\u8e0f\u307e\u3048\u305f\u4e0a\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b\u305f\u3081\u306e\u5177\u4f53\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b7\u3064\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">1: ConfigureAwait\u306e\u9069\u5207\u306a\u4f7f\u7528<\/h3>\n\n\n\n<p>ConfigureAwait(false)\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ConfigureAwaitOptimization\n{\n    \/\/ \u30e9\u30a4\u30d6\u30e9\u30ea\u30b3\u30fc\u30c9\u3067\u306e\u5b9f\u88c5\u4f8b\n    public async Task&lt;Data&gt; GetDataAsync()\n    {\n        \/\/ UI\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304c\u4e0d\u8981\u306a\u51e6\u7406\n        var rawData = await FetchDataAsync()\n            .ConfigureAwait(false);\n\n        var processed = await ProcessDataAsync(rawData)\n            .ConfigureAwait(false);\n\n        return processed;\n    }\n\n    \/\/ UI\u66f4\u65b0\u3092\u542b\u3080\u51e6\u7406\n    public async Task UpdateUIAsync(Data data)\n    {\n        \/\/ UI\u66f4\u65b0\u304c\u5fc5\u8981\u306a\u51e6\u7406\u306fConfigureAwait(false)\u3092\u4f7f\u7528\u3057\u306a\u3044\n        await Task.Delay(100); \/\/ UI\u66f4\u65b0\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        await DisplayDataAsync(data); \/\/ UI\u30b9\u30ec\u30c3\u30c9\u304c\u5fc5\u8981\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">2: \u4e26\u5217\u51e6\u7406\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a<\/h3>\n\n\n\n<p>\u3088\u308a\u8a73\u7d30\u306a\u4e26\u5217\u51e6\u7406\u306e\u5236\u5fa1\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ParallelProcessingOptimization\n{\n    private readonly SemaphoreSlim _semaphore;\n    private readonly ILogger&lt;ParallelProcessingOptimization&gt; _logger;\n\n    public ParallelProcessingOptimization(ILogger&lt;ParallelProcessingOptimization&gt; logger)\n    {\n        \/\/ \u30d7\u30ed\u30bb\u30c3\u30b5\u6570\u306b\u57fa\u3065\u3044\u3066\u4e26\u5217\u5ea6\u3092\u8a2d\u5b9a\n        _semaphore = new SemaphoreSlim(Environment.ProcessorCount);\n        _logger = logger;\n    }\n\n    \/\/ \u4e26\u5217\u5ea6\u5236\u5fa1\u4ed8\u304d\u306e\u51e6\u7406\n    public async Task ProcessItemsWithControlledParallelismAsync(\n        IEnumerable&lt;Item&gt; items,\n        CancellationToken cancellationToken)\n    {\n        var tasks = new List&lt;Task&gt;();\n\n        foreach (var item in items)\n        {\n            \/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u8981\u6c42\u306e\u30c1\u30a7\u30c3\u30af\n            cancellationToken.ThrowIfCancellationRequested();\n\n            \/\/ \u4e26\u5217\u5ea6\u3092\u5236\u5fa1\u3057\u306a\u304c\u3089\u30bf\u30b9\u30af\u3092\u4f5c\u6210\n            tasks.Add(ProcessWithSemaphoreAsync(item, cancellationToken));\n        }\n\n        try\n        {\n            await Task.WhenAll(tasks).ConfigureAwait(false);\n        }\n        catch (Exception ex)\n        {\n            _logger.LogError(ex, \"Parallel processing failed\");\n            throw;\n        }\n    }\n\n    private async Task ProcessWithSemaphoreAsync(\n        Item item,\n        CancellationToken cancellationToken)\n    {\n        try\n        {\n            await _semaphore.WaitAsync(cancellationToken)\n                .ConfigureAwait(false);\n\n            await ProcessItemAsync(item, cancellationToken)\n                .ConfigureAwait(false);\n        }\n        finally\n        {\n            _semaphore.Release();\n        }\n    }\n\n    \/\/ \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316\n    public async Task ProcessInBatchesAsync(\n        IEnumerable&lt;Item&gt; items,\n        int batchSize = 100)\n    {\n        var batches = items.Chunk(batchSize);\n\n        foreach (var batch in batches)\n        {\n            var batchTasks = batch.Select(ProcessItemAsync);\n            await Task.WhenAll(batchTasks).ConfigureAwait(false);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">3: \u30ad\u30e3\u30f3\u30bb\u30ec\u30fc\u30b7\u30e7\u30f3\u30c8\u30fc\u30af\u30f3\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u3088\u308a\u5805\u7262\u306a\u30ad\u30e3\u30f3\u30bb\u30eb\u51e6\u7406\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class CancellationHandling\n{\n    private readonly ILogger&lt;CancellationHandling&gt; _logger;\n\n    public async Task ProcessWithTimeoutAsync(\n        Func&lt;CancellationToken, Task&gt; operation,\n        TimeSpan timeout)\n    {\n        using var cts = new CancellationTokenSource();\n        using var linkedCts = CancellationTokenSource\n            .CreateLinkedTokenSource(cts.Token);\n\n        \/\/ \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306e\u8a2d\u5b9a\n        linkedCts.CancelAfter(timeout);\n\n        try\n        {\n            var timeoutTask = Task.Delay(timeout, linkedCts.Token);\n            var operationTask = operation(linkedCts.Token);\n\n            var completedTask = await Task.WhenAny(\n                operationTask, timeoutTask)\n                .ConfigureAwait(false);\n\n            if (completedTask == timeoutTask)\n            {\n                throw new TimeoutException(\n                    $\"Operation timed out after {timeout.TotalSeconds} seconds\");\n            }\n\n            await operationTask.ConfigureAwait(false);\n        }\n        catch (OperationCanceledException) when (linkedCts.Token.IsCancellationRequested)\n        {\n            _logger.LogWarning(\"Operation was cancelled\");\n            throw;\n        }\n        finally\n        {\n            \/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u30c8\u30fc\u30af\u30f3\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n            linkedCts.Cancel();\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">4: \u4f8b\u5916\u51e6\u7406\u306e\u6700\u9069\u5316<\/h3>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u4f8b\u5916\u51e6\u7406\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OptimizedExceptionHandling\n{\n    private readonly ILogger&lt;OptimizedExceptionHandling&gt; _logger;\n    private readonly CircuitBreaker _circuitBreaker = new();\n\n    public async Task&lt;Result&gt; ExecuteWithRetryAsync(\n        Func&lt;CancellationToken, Task&lt;Result&gt;&gt; operation,\n        int maxRetries = 3,\n        CancellationToken cancellationToken = default)\n    {\n        \/\/ \u30b5\u30fc\u30ad\u30c3\u30c8\u30d6\u30ec\u30fc\u30ab\u30fc\u30c1\u30a7\u30c3\u30af\n        if (!_circuitBreaker.CanExecute())\n        {\n            throw new CircuitBreakerOpenException();\n        }\n\n        for (int i = 0; i &lt;= maxRetries; i++)\n        {\n            try\n            {\n                return await operation(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n            catch (Exception ex) when (ShouldRetry(ex) &amp;&amp; i &lt; maxRetries)\n            {\n                _logger.LogWarning(ex, \n                    \"Retry attempt {Attempt} of {MaxRetries}\",\n                    i + 1, maxRetries);\n\n                \/\/ \u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\n                await Task.Delay(\n                    TimeSpan.FromSeconds(Math.Pow(2, i)),\n                    cancellationToken).ConfigureAwait(false);\n            }\n        }\n\n        _circuitBreaker.RecordFailure();\n        throw new MaxRetriesExceededException();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">5: \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u524a\u6e1b\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class MemoryOptimizedOperations\n{\n    private readonly ArrayPool&lt;byte&gt; _arrayPool = \n        ArrayPool&lt;byte&gt;.Shared;\n    private readonly MemoryPool&lt;char&gt; _memoryPool = \n        MemoryPool&lt;char&gt;.Shared;\n\n    public async Task ProcessLargeDataAsync(\n        Stream inputStream,\n        Stream outputStream,\n        CancellationToken cancellationToken)\n    {\n        byte[] buffer = _arrayPool.Rent(81920); \/\/ 80KB\n        try\n        {\n            int bytesRead;\n            while ((bytesRead = await inputStream\n                .ReadAsync(buffer, cancellationToken)\n                .ConfigureAwait(false)) &gt; 0)\n            {\n                await outputStream\n                    .WriteAsync(buffer.AsMemory(0, bytesRead), cancellationToken)\n                    .ConfigureAwait(false);\n            }\n        }\n        finally\n        {\n            _arrayPool.Return(buffer);\n        }\n    }\n\n    \/\/ StringBuilder\u30d7\u30fc\u30eb\u306e\u5b9f\u88c5\n    private readonly ObjectPool&lt;StringBuilder&gt; _builderPool =\n        new DefaultObjectPool&lt;StringBuilder&gt;(\n            new StringBuilderPooledObjectPolicy());\n\n    public async Task&lt;string&gt; BuildLargeStringAsync(\n        IAsyncEnumerable&lt;string&gt; parts)\n    {\n        var builder = _builderPool.Get();\n        try\n        {\n            await foreach (var part in parts)\n            {\n                builder.Append(part);\n            }\n            return builder.ToString();\n        }\n        finally\n        {\n            builder.Clear();\n            _builderPool.Return(builder);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">6: \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DeadlockPreventionPatterns\n{\n    \/\/ \u975e\u540c\u671f\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30e1\u30bd\u30c3\u30c9\n    public static async Task&lt;DeadlockPreventionPatterns&gt; CreateAsync()\n    {\n        var instance = new DeadlockPreventionPatterns();\n        await instance.InitializeAsync().ConfigureAwait(false);\n        return instance;\n    }\n\n    \/\/ \u975e\u540c\u671f\u521d\u671f\u5316\n    private async Task InitializeAsync()\n    {\n        await Task.Yield(); \/\/ \u540c\u671f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304b\u3089\u306e\u89e3\u653e\n        \/\/ \u521d\u671f\u5316\u51e6\u7406\n    }\n\n    \/\/ \u975e\u540c\u671f\u7834\u68c4\u30d1\u30bf\u30fc\u30f3\n    public async ValueTask DisposeAsync()\n    {\n        await CleanupAsync().ConfigureAwait(false);\n        GC.SuppressFinalize(this);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">7: ValueTask\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ValueTaskOptimization\n{\n    private readonly IMemoryCache _cache;\n\n    \/\/ \u5b8c\u4e86\u6e08\u307f\u306eValueTask\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n    private static readonly ValueTask&lt;int&gt; DefaultValueTask = \n        new ValueTask&lt;int&gt;(42);\n\n    public ValueTask&lt;int&gt; GetOptimizedValueAsync(string key)\n    {\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u6642\u306f\u5272\u308a\u5f53\u3066\u306a\u3057\u3067\u8fd4\u5374\n        if (_cache.TryGetValue&lt;int&gt;(key, out var value))\n        {\n            return DefaultValueTask;\n        }\n\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u6642\u306e\u307fTask\u3092\u4f5c\u6210\n        return new ValueTask&lt;int&gt;(LoadValueAsync(key));\n    }\n\n    \/\/ ValueTask\u306e\u4f7f\u7528\u306b\u95a2\u3059\u308b\u6ce8\u610f\u70b9\n    public async ValueTask&lt;Result&gt; ProcessDataAsync(Data data)\n    {\n        \/\/ ValueTask\u306f\u4e00\u5ea6\u3060\u3051await\u3059\u308b\n        var result = await GetOptimizedValueAsync(\"key\")\n            .ConfigureAwait(false);\n\n        \/\/ \u7d50\u679c\u3092\u8fd4\u5374\n        return new Result { Value = result };\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u975e\u540c\u671f\u51e6\u7406\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5b9f\u969b\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u9069\u7528\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5b9f\u88c5\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">WebAPI\u3067\u306e\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u304a\u3051\u308b\u52b9\u7387\u7684\u306aWeb API\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OrderController : ControllerBase\n{\n    private readonly IOrderService _orderService;\n    private readonly IBackgroundJobScheduler _jobScheduler;\n    private readonly ILogger&lt;OrderController&gt; _logger;\n    private readonly IMetricsCollector _metrics;\n\n    public class CreateOrderRequest\n    {\n        public string CustomerId { get; set; }\n        public List&lt;OrderItem&gt; Items { get; set; }\n        public PaymentInfo PaymentInfo { get; set; }\n    }\n\n    [HttpPost(\"orders\")]\n    public async Task&lt;IActionResult&gt; CreateOrderAsync(\n        CreateOrderRequest request,\n        CancellationToken cancellationToken)\n    {\n        using var scope = _logger.BeginScope(\n            \"Creating order for customer {CustomerId}\", \n            request.CustomerId);\n\n        try\n        {\n            \/\/ \u4e26\u5217\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\n            var validationTasks = new[]\n            {\n                ValidateInventoryAsync(request.Items, cancellationToken),\n                ValidateCustomerAsync(request.CustomerId, cancellationToken),\n                ValidatePaymentAsync(request.PaymentInfo, cancellationToken)\n            };\n\n            if (!await Task.WhenAll(validationTasks)\n                .ContinueWith(t =&gt; t.Result.All(r =&gt; r), \n                    cancellationToken)\n                .ConfigureAwait(false))\n            {\n                return BadRequest(\"Validation failed\");\n            }\n\n            \/\/ \u6ce8\u6587\u51e6\u7406\n            var order = await _orderService\n                .CreateOrderAsync(request, cancellationToken)\n                .ConfigureAwait(false);\n\n            \/\/ \u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u30b8\u30e7\u30d6\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\n            await _jobScheduler\n                .ScheduleAsync(new ProcessOrderJob(order.Id))\n                .ConfigureAwait(false);\n\n            \/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a18\u9332\n            _metrics.RecordOrderCreation(order.TotalAmount);\n\n            return CreatedAtAction(\n                nameof(GetOrderAsync),\n                new { id = order.Id },\n                order);\n        }\n        catch (Exception ex) when (ex is not OperationCanceledException)\n        {\n            _logger.LogError(ex, \"Failed to create order\");\n            return StatusCode(500, \"Internal server error\");\n        }\n    }\n\n    [HttpGet(\"orders\/{id}\")]\n    public async Task&lt;IActionResult&gt; GetOrderAsync(\n        string id,\n        CancellationToken cancellationToken)\n    {\n        try\n        {\n            var order = await _orderService\n                .GetOrderAsync(id, cancellationToken)\n                .ConfigureAwait(false);\n\n            if (order == null)\n            {\n                return NotFound();\n            }\n\n            return Ok(order);\n        }\n        catch (Exception ex) when (ex is not OperationCanceledException)\n        {\n            _logger.LogError(ex, \"Failed to get order {OrderId}\", id);\n            return StatusCode(500, \"Internal server error\");\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u975e\u540c\u671f\u5316<\/h3>\n\n\n\n<p>Entity Framework\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OrderRepository : IOrderRepository\n{\n    private readonly AppDbContext _context;\n    private readonly IMemoryCache _cache;\n    private readonly ILogger&lt;OrderRepository&gt; _logger;\n    private readonly SemaphoreSlim _semaphore = new(1);\n\n    public async Task&lt;Order&gt; GetByIdWithCachingAsync(\n        string id,\n        CancellationToken cancellationToken)\n    {\n        var cacheKey = $\"order_{id}\";\n\n        try\n        {\n            \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30c1\u30a7\u30c3\u30af\n            if (_cache.TryGetValue&lt;Order&gt;(cacheKey, out var cachedOrder))\n            {\n                _logger.LogDebug(\"Cache hit for order {OrderId}\", id);\n                return cachedOrder;\n            }\n\n            \/\/ \u8907\u6570\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3088\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u66f4\u65b0\u306e\u91cd\u8907\u3092\u9632\u3050\n            await _semaphore.WaitAsync(cancellationToken)\n                .ConfigureAwait(false);\n\n            \/\/ \u4e8c\u91cd\u30c1\u30a7\u30c3\u30af\n            if (_cache.TryGetValue&lt;Order&gt;(cacheKey, out cachedOrder))\n            {\n                return cachedOrder;\n            }\n\n            \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u306e\u53d6\u5f97\n            var order = await _context.Orders\n                .Include(o =&gt; o.Items)\n                .Include(o =&gt; o.Customer)\n                .AsNoTracking()\n                .FirstOrDefaultAsync(o =&gt; o.Id == id, cancellationToken)\n                .ConfigureAwait(false);\n\n            if (order != null)\n            {\n                var cacheOptions = new MemoryCacheEntryOptions()\n                    .SetSlidingExpiration(TimeSpan.FromMinutes(10))\n                    .RegisterPostEvictionCallback((key, value, reason, state) =&gt;\n                    {\n                        _logger.LogDebug(\n                            \"Order {OrderId} evicted from cache. Reason: {Reason}\",\n                            id, reason);\n                    });\n\n                _cache.Set(cacheKey, order, cacheOptions);\n            }\n\n            return order;\n        }\n        finally\n        {\n            _semaphore.Release();\n        }\n    }\n\n    public async Task&lt;IReadOnlyList&lt;Order&gt;&gt; GetRecentOrdersAsync(\n        string customerId,\n        int count,\n        CancellationToken cancellationToken)\n    {\n        \/\/ \u52b9\u7387\u7684\u306a\u30af\u30a8\u30ea\u5b9f\u884c\n        return await _context.Orders\n            .Where(o =&gt; o.CustomerId == customerId)\n            .OrderByDescending(o =&gt; o.CreatedAt)\n            .Take(count)\n            .Select(o =&gt; new Order\n            {\n                Id = o.Id,\n                CustomerId = o.CustomerId,\n                TotalAmount = o.TotalAmount,\n                Status = o.Status,\n                CreatedAt = o.CreatedAt\n            })\n            .AsNoTracking()\n            .ToListAsync(cancellationToken)\n            .ConfigureAwait(false);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3067\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406\u3068\u9032\u6357\u5831\u544a\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class FileProcessor\n{\n    private readonly ILogger&lt;FileProcessor&gt; _logger;\n    private readonly ArrayPool&lt;byte&gt; _arrayPool;\n\n    public async Task ProcessLargeFileAsync(\n        string inputPath,\n        string outputPath,\n        IProgress&lt;int&gt; progress,\n        CancellationToken cancellationToken)\n    {\n        var fileInfo = new FileInfo(inputPath);\n        var totalBytes = fileInfo.Length;\n        var processedBytes = 0L;\n\n        \/\/ \u6700\u9069\u306a\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306e\u4f7f\u7528\n        var buffer = _arrayPool.Rent(81920); \/\/ 80KB\n\n        try\n        {\n            await using var input = new FileStream(\n                inputPath,\n                FileMode.Open,\n                FileAccess.Read,\n                FileShare.Read,\n                bufferSize: 4096,\n                useAsync: true);\n\n            await using var output = new FileStream(\n                outputPath,\n                FileMode.Create,\n                FileAccess.Write,\n                FileShare.None,\n                bufferSize: 4096,\n                useAsync: true);\n\n            int bytesRead;\n            while ((bytesRead = await input\n                .ReadAsync(buffer, cancellationToken)\n                .ConfigureAwait(false)) &gt; 0)\n            {\n                await output\n                    .WriteAsync(buffer.AsMemory(0, bytesRead), cancellationToken)\n                    .ConfigureAwait(false);\n\n                processedBytes += bytesRead;\n                var percentComplete = (int)((processedBytes * 100) \/ totalBytes);\n                progress?.Report(percentComplete);\n\n                \/\/ \u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u305f\u3081\u306e\u5b9a\u671f\u7684\u306aGC\u8981\u6c42\n                if (processedBytes % (10 * 1024 * 1024) == 0) \/\/ 10MB\u6bce\n                {\n                    GC.Collect(0, GCCollectionMode.Optimized);\n                }\n            }\n        }\n        finally\n        {\n            _arrayPool.Return(buffer);\n        }\n    }\n\n    \/\/ \u30c1\u30e3\u30f3\u30af\u5358\u4f4d\u3067\u306e\u4e26\u5217\u51e6\u7406\n    public async Task ProcessFileInChunksAsync(\n        string inputPath,\n        int chunkSize,\n        Func&lt;byte[], int, Task&gt; processChunk,\n        CancellationToken cancellationToken)\n    {\n        var chunks = new ConcurrentQueue&lt;(long Offset, int Size)&gt;();\n        var fileInfo = new FileInfo(inputPath);\n        var totalChunks = (int)Math.Ceiling(fileInfo.Length \/ (double)chunkSize);\n\n        \/\/ \u30c1\u30e3\u30f3\u30af\u60c5\u5831\u306e\u751f\u6210\n        for (long offset = 0; offset &lt; fileInfo.Length; offset += chunkSize)\n        {\n            var size = (int)Math.Min(chunkSize, fileInfo.Length - offset);\n            chunks.Enqueue((offset, size));\n        }\n\n        \/\/ \u4e26\u5217\u51e6\u7406\u306e\u5236\u5fa1\n        var tasks = new List&lt;Task&gt;();\n        var semaphore = new SemaphoreSlim(Environment.ProcessorCount);\n\n        while (chunks.TryDequeue(out var chunk))\n        {\n            await semaphore.WaitAsync(cancellationToken)\n                .ConfigureAwait(false);\n\n            tasks.Add(Task.Run(async () =&gt;\n            {\n                try\n                {\n                    using var fileStream = new FileStream(\n                        inputPath,\n                        FileMode.Open,\n                        FileAccess.Read,\n                        FileShare.Read);\n\n                    fileStream.Seek(chunk.Offset, SeekOrigin.Begin);\n                    var buffer = new byte[chunk.Size];\n                    var bytesRead = await fileStream\n                        .ReadAsync(buffer, cancellationToken)\n                        .ConfigureAwait(false);\n\n                    await processChunk(buffer, bytesRead)\n                        .ConfigureAwait(false);\n                }\n                finally\n                {\n                    semaphore.Release();\n                }\n            }, cancellationToken));\n        }\n\n        await Task.WhenAll(tasks).ConfigureAwait(false);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u76f4\u9762\u3059\u308b\u4e00\u822c\u7684\u306a\u30b7\u30ca\u30ea\u30aa\u306b\u5bfe\u3059\u308b\u52b9\u7387\u7684\u306a\u89e3\u6c7a\u7b56\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<br>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u3067\u6ce8\u610f\u3059\u3079\u304d\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">async\/await\u306e\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u3068\u56de\u907f\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u975e\u540c\u671f\u51e6\u7406\u306e\u9023\u9396\u306b\u3088\u308b\u6027\u80fd\u4f4e\u4e0b<\/h3>\n\n\n\n<p>\u975e\u540c\u671f\u51e6\u7406\u3092\u4e0d\u9069\u5207\u306b\u9023\u9396\u3055\u305b\u308b\u3053\u3068\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u4f4e\u4e0b\u3068\u305d\u306e\u89e3\u6c7a\u7b56\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">\u4e0d\u5fc5\u8981\u306a\u76f4\u5217\u5316\u3068\u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class AsyncChainAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: \u4e0d\u5fc5\u8981\u306a\u76f4\u5217\u5316\n    public async Task&lt;List&lt;Result&gt;&gt; ProcessItemsBadlyAsync(\n        IEnumerable&lt;Item&gt; items)\n    {\n        var results = new List&lt;Result&gt;();\n        foreach (var item in items) \/\/ \u9010\u6b21\u51e6\u7406\n        {\n            var result = await ProcessItemAsync(item); \/\/ \u76f4\u5217\u5b9f\u884c\n            results.Add(result);\n        }\n        return results;\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528\n    public async Task&lt;List&lt;Result&gt;&gt; ProcessItemsProperlyAsync(\n        IEnumerable&lt;Item&gt; items)\n    {\n        \/\/ \u3059\u3079\u3066\u306e\u30bf\u30b9\u30af\u3092\u540c\u6642\u306b\u958b\u59cb\n        var tasks = items.Select(item =&gt; ProcessItemAsync(item));\n        var results = await Task.WhenAll(tasks).ConfigureAwait(false);\n        return results.ToList();\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">\u4e0d\u5fc5\u8981\u306a\u30bf\u30b9\u30af\u751f\u6210\u3068\u76f4\u63a5\u975e\u540c\u671f\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class AsyncChainAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: \u4e0d\u5fc5\u8981\u306a\u30bf\u30b9\u30af\u751f\u6210\n    public async Task&lt;Data&gt; GetDataBadlyAsync()\n    {\n        return await Task.Run(async () =&gt;\n        {\n            var result = await FetchDataAsync(); \/\/ \u4e0d\u8981\u306aTask.Run\n            return result;\n        });\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u76f4\u63a5\u975e\u540c\u671f\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\n    public Task&lt;Data&gt; GetDataProperlyAsync()\n    {\n        return FetchDataAsync(); \/\/ \u76f4\u63a5\u975e\u540c\u671f\u30e1\u30bd\u30c3\u30c9\u3092\u8fd4\u3059\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u4f8b\u5916\u51e6\u7406\u306e\u8aa4\u3063\u305f\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u975e\u540c\u671f\u51e6\u7406\u306b\u304a\u3051\u308b\u4e0d\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406\u3068\u305d\u306e\u6539\u5584\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">\u4f8b\u5916\u306e\u63e1\u308a\u3064\u3076\u3057\u3068\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ExceptionHandlingAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: \u4f8b\u5916\u306e\u63e1\u308a\u3064\u3076\u3057\n    public async Task ProcessDataBadlyAsync()\n    {\n        try\n        {\n            await RiskyOperationAsync();\n        }\n        catch (Exception)\n        {\n            \/\/ \u4f55\u3082\u3057\u306a\u3044 - \u5371\u967a\uff01\n        }\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406\n    public async Task ProcessDataProperlyAsync()\n    {\n        try\n        {\n            await RiskyOperationAsync().ConfigureAwait(false);\n        }\n        catch (SpecificException ex)\n        {\n            \/\/ \u7279\u5b9a\u306e\u4f8b\u5916\u306b\u5bfe\u3059\u308b\u9069\u5207\u306a\u51e6\u7406\n            await HandleSpecificErrorAsync(ex).ConfigureAwait(false);\n        }\n        catch (Exception ex)\n        {\n            \/\/ \u30ed\u30b0\u8a18\u9332\u3068\u4e0a\u4f4d\u5c64\u3078\u306e\u901a\u77e5\n            _logger.LogError(ex, \"Unexpected error occurred\");\n            throw;\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">\u4f8b\u5916\u306e\u51e6\u7f6e\u6f0f\u308c\u3068\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ExceptionHandlingAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: async void\n    public async void HandleEventBadly(object sender, EventArgs e)\n    {\n        await RiskyOperationAsync(); \/\/ \u4f8b\u5916\u304c\u5931\u308f\u308c\u308b\u53ef\u80fd\u6027\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u3067\u306e\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406\n    public async void HandleEventProperly(object sender, EventArgs e)\n    {\n        try\n        {\n            await RiskyOperationAsync().ConfigureAwait(false);\n        }\n        catch (Exception ex)\n        {\n            _logger.LogError(ex, \"Event handler failed\");\n            \/\/ UI\u306e\u5834\u5408\u306f\u30e6\u30fc\u30b6\u30fc\u306b\u901a\u77e5\n            await ShowErrorDialogAsync(ex.Message).ConfigureAwait(false);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u4e0d\u9069\u5207\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5207\u308a\u66ff\u3048<\/h3>\n\n\n\n<p>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5207\u308a\u66ff\u3048\u306b\u95a2\u3059\u308b\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u7b56\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u4e0d\u8981\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5fa9\u5e30\u3068\u5fc5\u8981\u306a\u5834\u5408\u306e\u307f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5fa9\u5e30<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ContextSwitchingAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: \u4e0d\u8981\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5fa9\u5e30\n    private async Task DoWorkBadlyAsync()\n    {\n        var data = await GetDataAsync(); \/\/ \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5fa9\u5e30\u304c\u5fc5\u8981\n        await ProcessDataAsync(data); \/\/ \u3055\u3089\u306b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5fa9\u5e30\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u5fc5\u8981\u306a\u5834\u5408\u306e\u307f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5fa9\u5e30\n    private async Task DoWorkProperlyAsync()\n    {\n        var data = await GetDataAsync().ConfigureAwait(false);\n        await ProcessDataAsync(data).ConfigureAwait(false);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u306e\u5371\u967a\u6027\u3068\u540c\u671f\u547c\u3073\u51fa\u3057\u304c\u5fc5\u8981\u306a\u5834\u5408\u306e\u5bfe\u51e6<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ContextSwitchingAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u306e\u5371\u967a\u6027\n    public Result GetDataSynchronously()\n    {\n        return GetDataAsync().Result; \/\/ \u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u306e\u53ef\u80fd\u6027\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u540c\u671f\u547c\u3073\u51fa\u3057\u304c\u5fc5\u8981\u306a\u5834\u5408\u306e\u5bfe\u51e6\n    public Result GetDataSynchronouslyProperly()\n    {\n        return Task.Run(async () =&gt;\n        {\n            return await GetDataAsync().ConfigureAwait(false);\n        }).GetAwaiter().GetResult();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/h3>\n\n\n\n<p>\u975e\u540c\u671f\u51e6\u7406\u306b\u304a\u3051\u308b\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class MemoryLeakPrevention : IAsyncDisposable\n{\n    private readonly CancellationTokenSource _cts = new();\n    private readonly SemaphoreSlim _semaphore = new(1);\n    private bool _disposed;\n\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: \u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\u5fd8\u308c\n    public async Task ProcessDataBadlyAsync()\n    {\n        var semaphore = new SemaphoreSlim(1); \/\/ \u89e3\u653e\u3055\u308c\u306a\u3044\n        await semaphore.WaitAsync();\n        try\n        {\n            await DoWorkAsync();\n        }\n        finally\n        {\n            semaphore.Release();\n        }\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u9069\u5207\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\n    public async Task ProcessDataProperlyAsync()\n    {\n        await _semaphore.WaitAsync().ConfigureAwait(false);\n        try\n        {\n            await DoWorkAsync().ConfigureAwait(false);\n        }\n        finally\n        {\n            _semaphore.Release();\n        }\n    }\n\n    \/\/ \u975e\u540c\u671f\u7834\u68c4\u306e\u5b9f\u88c5\n    public async ValueTask DisposeAsync()\n    {\n        if (_disposed)\n        {\n            return;\n        }\n\n        _disposed = true;\n\n        \/\/ \u30ad\u30e3\u30f3\u30bb\u30eb\u3092\u8981\u6c42\n        _cts.Cancel();\n\n        \/\/ \u7ba1\u7406\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n        _cts.Dispose();\n        _semaphore.Dispose();\n\n        await CleanupAsync().ConfigureAwait(false);\n\n        GC.SuppressFinalize(this);\n    }\n\n    \/\/ \u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u306e\u9069\u5207\u306a\u89e3\u9664\n    private readonly List&lt;WeakReference&lt;IDisposable&gt;&gt; _eventHandlers = new();\n\n    public void RegisterEventHandler(IDisposable handler)\n    {\n        _eventHandlers.Add(new WeakReference&lt;IDisposable&gt;(handler));\n    }\n\n    private async Task CleanupAsync()\n    {\n        foreach (var handlerRef in _eventHandlers)\n        {\n            if (handlerRef.TryGetTarget(out var handler))\n            {\n                handler.Dispose();\n            }\n        }\n        _eventHandlers.Clear();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p>\u975e\u540c\u671f\u51e6\u7406\u306b\u304a\u3051\u308b\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u7b56\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">using\u53e5\u306e\u4e0d\u9069\u5207\u306a\u4f7f\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ResourceManagementAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: using\u53e5\u306e\u4e0d\u9069\u5207\u306a\u4f7f\u7528\n    public async Task ProcessFileBadlyAsync(string path)\n    {\n        using var stream = new FileStream(path, FileMode.Open);\n        await ProcessStreamAsync(stream); \/\/ stream\u304c\u65e9\u671f\u306b\u89e3\u653e\u3055\u308c\u308b\u53ef\u80fd\u6027\n    }\n\n    \/\/ \u6539\u5584\u4f8b: await using\u306e\u4f7f\u7528\n    public async Task ProcessFileProperlyAsync(string path)\n    {\n        await using var stream = new FileStream(\n            path,\n            FileMode.Open,\n            FileAccess.Read,\n            FileShare.Read,\n            bufferSize: 4096,\n            useAsync: true);\n\n        await ProcessStreamAsync(stream).ConfigureAwait(false);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">\u975e\u540c\u671f\u7834\u68c4\u306e\u8003\u616e\u6f0f\u308c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ResourceManagementAntipatterns\n{\n    \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: \u975e\u540c\u671f\u7834\u68c4\u306e\u8003\u616e\u6f0f\u308c\n    public class BadResourceManager\n    {\n        private readonly HttpClient _client = new();\n\n        public void Dispose() \/\/ \u975e\u540c\u671f\u7834\u68c4\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\n        {\n            _client.Dispose();\n        }\n    }\n\n    \/\/ \u6539\u5584\u4f8b: \u975e\u540c\u671f\u7834\u68c4\u306e\u5b9f\u88c5\n    public class ProperResourceManager : IAsyncDisposable\n    {\n        private readonly HttpClient _client = new();\n        private bool _disposed;\n\n        public async ValueTask DisposeAsync()\n        {\n            if (_disposed)\n            {\n                return;\n            }\n\n            _disposed = true;\n\n            \/\/ \u7ba1\u7406\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n            _client.Dispose();\n\n            \/\/ \u975e\u540c\u671f\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n            await CleanupAsync().ConfigureAwait(false);\n\n            GC.SuppressFinalize(this);\n        }\n\n        private async Task CleanupAsync()\n        {\n            \/\/ \u975e\u540c\u671f\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u51e6\u7406\n            await Task.CompletedTask.ConfigureAwait(false);\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u63a1\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<br>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6e2c\u5b9a\u3057\u3001\u6700\u9069\u5316\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-35\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u3068\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u624b\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-36\">\u975e\u540c\u671f\u51e6\u7406\u306e\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u7279\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u3068\u5206\u6790\u306e\u305f\u3081\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PerformanceMonitoring\n{\n    private readonly ILogger&lt;PerformanceMonitoring&gt; _logger;\n    private readonly Metrics _metrics;\n\n    \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u30c7\u30b3\u30ec\u30fc\u30bf\n    public async Task&lt;T&gt; MeasureExecutionAsync&lt;T&gt;(\n        string operationName,\n        Func&lt;Task&lt;T&gt;&gt; operation)\n    {\n        using var activity = Activity.Current?.Source\n            .StartActivity($\"Execute_{operationName}\");\n\n        var sw = Stopwatch.StartNew();\n        try\n        {\n            var result = await operation().ConfigureAwait(false);\n\n            \/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a18\u9332\n            _metrics.RecordDuration(operationName, sw.Elapsed);\n\n            activity?.SetTag(\"duration_ms\", sw.ElapsedMilliseconds);\n            activity?.SetTag(\"success\", true);\n\n            return result;\n        }\n        catch (Exception ex)\n        {\n            activity?.SetTag(\"error\", ex.GetType().Name);\n            activity?.SetTag(\"success\", false);\n            throw;\n        }\n        finally\n        {\n            sw.Stop();\n            _logger.LogInformation(\n                \"{Operation} completed in {Duration}ms\",\n                operationName,\n                sw.ElapsedMilliseconds);\n        }\n    }\n\n    \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996\n    public class MemoryMonitor : IDisposable\n    {\n        private readonly string _operationName;\n        private readonly long _initialMemory;\n        private readonly Stopwatch _sw;\n        private readonly ILogger _logger;\n\n        public MemoryMonitor(string operationName, ILogger logger)\n        {\n            _operationName = operationName;\n            _logger = logger;\n            _initialMemory = GC.GetTotalMemory(false);\n            _sw = Stopwatch.StartNew();\n        }\n\n        public void Dispose()\n        {\n            _sw.Stop();\n            var finalMemory = GC.GetTotalMemory(false);\n            var memoryDiff = finalMemory - _initialMemory;\n\n            _logger.LogInformation(\n                \"{Operation} used {MemoryMB:F2}MB over {Duration}ms\",\n                _operationName,\n                memoryDiff \/ 1024.0 \/ 1024.0,\n                _sw.ElapsedMilliseconds);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-37\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584\u306e\u305f\u3081\u306e\u8a08\u6e2c\u3068\u6700\u9069\u5316<\/h3>\n\n\n\n<p>\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3068\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PerformanceOptimization\n{\n    \/\/ \u30d9\u30f3\u30c1\u30de\u30fc\u30af\u5b9a\u7fa9\n    [MemoryDiagnoser]\n    public class AsyncOperationsBenchmark\n    {\n        private readonly SampleData[] _testData = GenerateTestData(1000);\n        private readonly ParallelOptions _parallelOptions = new()\n        {\n            MaxDegreeOfParallelism = Environment.ProcessorCount\n        };\n\n        [Benchmark(Baseline = true)]\n        public async Task TraditionalAsync()\n        {\n            foreach (var item in _testData)\n            {\n                await ProcessItemAsync(item).ConfigureAwait(false);\n            }\n        }\n\n        [Benchmark]\n        public async Task ParallelForEachAsync()\n        {\n            await Parallel.ForEachAsync(_testData, _parallelOptions,\n                async (item, token) =&gt;\n                {\n                    await ProcessItemAsync(item).ConfigureAwait(false);\n                });\n        }\n\n        [Benchmark]\n        public async Task BatchProcessingAsync()\n        {\n            var batches = _testData.Chunk(100);\n            foreach (var batch in batches)\n            {\n                var tasks = batch.Select(ProcessItemAsync);\n                await Task.WhenAll(tasks).ConfigureAwait(false);\n            }\n        }\n    }\n\n    \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u4f8b\n    public class OptimizedDataProcessor\n    {\n        private readonly MemoryCache _cache;\n        private readonly SemaphoreSlim _semaphore;\n        private readonly Channel&lt;WorkItem&gt; _channel;\n\n        public OptimizedDataProcessor()\n        {\n            _cache = new MemoryCache(new MemoryCacheOptions\n            {\n                SizeLimit = 1024\n            });\n            _semaphore = new SemaphoreSlim(Environment.ProcessorCount);\n            _channel = Channel.CreateBounded&lt;WorkItem&gt;(new BoundedChannelOptions(100)\n            {\n                FullMode = BoundedChannelFullMode.Wait\n            });\n        }\n\n        public async Task ProcessDataStreamAsync(\n            IAsyncEnumerable&lt;Data&gt; dataStream,\n            CancellationToken cancellationToken)\n        {\n            \/\/ \u4e26\u5217\u51e6\u7406\u30ef\u30fc\u30ab\u30fc\u306e\u8d77\u52d5\n            var processingTask = Task.Run(async () =&gt;\n            {\n                await foreach (var item in _channel.Reader.ReadAllAsync(cancellationToken))\n                {\n                    await ProcessWorkItemAsync(item, cancellationToken)\n                        .ConfigureAwait(false);\n                }\n            });\n\n            \/\/ \u30c7\u30fc\u30bf\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u51e6\u7406\n            await foreach (var data in dataStream.WithCancellation(cancellationToken))\n            {\n                var workItem = new WorkItem(data);\n                await _channel.Writer.WriteAsync(workItem, cancellationToken)\n                    .ConfigureAwait(false);\n            }\n\n            _channel.Writer.Complete();\n            await processingTask.ConfigureAwait(false);\n        }\n\n        private async Task ProcessWorkItemAsync(\n            WorkItem item,\n            CancellationToken cancellationToken)\n        {\n            await _semaphore.WaitAsync(cancellationToken)\n                .ConfigureAwait(false);\n            try\n            {\n                \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30c1\u30a7\u30c3\u30af\n                var cacheKey = item.GetCacheKey();\n                if (_cache.TryGetValue(cacheKey, out var cachedResult))\n                {\n                    return;\n                }\n\n                \/\/ \u51e6\u7406\u306e\u5b9f\u884c\n                var result = await ProcessInternalAsync(item, cancellationToken)\n                    .ConfigureAwait(false);\n\n                \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u66f4\u65b0\n                var cacheEntryOptions = new MemoryCacheEntryOptions()\n                    .SetSize(1)\n                    .SetSlidingExpiration(TimeSpan.FromMinutes(5));\n\n                _cache.Set(cacheKey, result, cacheEntryOptions);\n            }\n            finally\n            {\n                _semaphore.Release();\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-38\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u624b\u6cd5\u3068\u305d\u306e\u52b9\u679c\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PerformanceTuningExamples\n{\n    \/\/ 1. ValueTask\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\n    private static readonly ValueTask&lt;int&gt; _cachedResult = \n        new ValueTask&lt;int&gt;(42);\n\n    public ValueTask&lt;int&gt; GetOptimizedValueAsync(bool useCache)\n    {\n        return useCache ? _cachedResult : \n            new ValueTask&lt;int&gt;(LoadValueAsync());\n    }\n\n    \/\/ 2. \u30d0\u30c3\u30d5\u30a1\u30d7\u30fc\u30eb\u306e\u6d3b\u7528\n    private readonly ArrayPool&lt;byte&gt; _arrayPool = ArrayPool&lt;byte&gt;.Shared;\n\n    public async Task ProcessDataStreamAsync(\n        Stream stream,\n        CancellationToken cancellationToken)\n    {\n        var buffer = _arrayPool.Rent(81920);\n        try\n        {\n            await ProcessWithBufferAsync(stream, buffer, cancellationToken)\n                .ConfigureAwait(false);\n        }\n        finally\n        {\n            _arrayPool.Return(buffer);\n        }\n    }\n\n    \/\/ 3. \u52b9\u7387\u7684\u306a\u4e26\u5217\u51e6\u7406\n    public async Task ProcessItemsAsync(\n        IEnumerable&lt;Item&gt; items,\n        CancellationToken cancellationToken)\n    {\n        var options = new ParallelOptions\n        {\n            MaxDegreeOfParallelism = Environment.ProcessorCount,\n            CancellationToken = cancellationToken\n        };\n\n        await Parallel.ForEachAsync(items, options,\n            async (item, token) =&gt;\n            {\n                await ProcessItemAsync(item, token)\n                    .ConfigureAwait(false);\n            });\n    }\n\n    \/\/ 4. \u30e1\u30e2\u30ea\u52b9\u7387\u306e\u6700\u9069\u5316\n    public async IAsyncEnumerable&lt;Result&gt; ProcessLargeDataSetAsync(\n        [EnumeratorCancellation] CancellationToken cancellationToken = default)\n    {\n        await foreach (var item in GetDataStreamAsync()\n            .WithCancellation(cancellationToken))\n        {\n            var result = await ProcessItemAsync(item, cancellationToken)\n                .ConfigureAwait(false);\n            yield return result;\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-39\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u7d50\u679c\u306e\u5206\u6790<\/h3>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u7d50\u679c\u306e\u30b5\u30f3\u30d7\u30eb\u3068\u5206\u6790\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u7d50\u679c\u306e\u4f8b(BenchmarkDotNet=v0.13.5)<\/h4>\n\n\n<div id=\"id-b21dac94-c7b2-4949-8052-c062c10b1dbb\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Method<\/th><th>Mean<\/th><th>Error<\/th><th>StdDev<\/th><th>Gen0<\/th><th>Allocated<\/th><\/tr><\/thead><tbody><tr><td>TraditionalAsync<\/td><td>1.234 s<\/td><td>0.0123 s<\/td><td>0.0234 s<\/td><td>2.0<\/td><td>4.28 MB<\/td><\/tr><tr><td>ParallelForEach<\/td><td>0.432 s<\/td><td>0.0043 s<\/td><td>0.0086 s<\/td><td>3.0<\/td><td>5.12 MB<\/td><\/tr><tr><td>BatchProcessing<\/td><td>0.321 s<\/td><td>0.0032 s<\/td><td>0.0064 s<\/td><td>2.5<\/td><td>4.86 MB<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u5206\u6790\u30dd\u30a4\u30f3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u884c\u6642\u9593\uff08Mean\uff09: \u30d0\u30c3\u30c1\u51e6\u7406\u304c\u6700\u3082\u9ad8\u901f<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\uff08Allocated\uff09: \u5f93\u6765\u306e\u65b9\u6cd5\u304c\u6700\u3082\u52b9\u7387\u7684<\/li>\n\n\n\n<li>GC\u30d7\u30ec\u30c3\u30b7\u30e3\u30fc\uff08Gen0\uff09: \u5f93\u6765\u306e\u65b9\u6cd5\u304c\u6700\u3082\u4f4e\u3044<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u63a8\u5968\u4e8b\u9805<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\">\n<li>\u5c0f\u898f\u6a21\u30c7\u30fc\u30bf: \u5f93\u6765\u306e\u65b9\u6cd5<\/li>\n\n\n\n<li>\u5927\u898f\u6a21\u30c7\u30fc\u30bf: \u30d0\u30c3\u30c1\u51e6\u7406<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u5236\u7d04\u74b0\u5883: \u5f93\u6765\u306e\u65b9\u6cd5<\/li>\n\n\n\n<li>\u9ad8\u30b9\u30eb\u30fc\u30d7\u30c3\u30c8\u8981\u4ef6: \u4e26\u5217\u51e6\u7406<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6e2c\u5b9a\u3068\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u624b\u6cd5\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u975e\u540c\u671f\u51e6\u7406\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u3068\u52b9\u7387\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306f\u7d99\u7d9a\u7684\u306a\u30d7\u30ed\u30bb\u30b9\u3067\u3042\u308a\u3001\u5b9a\u671f\u7684\u306a\u6e2c\u5b9a\u3068\u5206\u6790\u3001\u305d\u3057\u3066\u5fc5\u8981\u306b\u5fdc\u3058\u305f\u6700\u9069\u5316\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-41\">async\/await\u306e\u307e\u3068\u3081<\/h2>\n\n\n\n<p>async\/await\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u3068\u51e6\u7406\u52b9\u7387\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br>\u672c\u8a18\u4e8b\u3067\u89e3\u8aac\u3057\u305f\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u624b\u6cd5\u3092\u5b9f\u8df5\u3059\u308b\u3053\u3068\u3067\u3001\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u975e\u540c\u671f\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u3053\u306e\u8a18\u4e8b\u306e\u4e3b\u306a\u30dd\u30a4\u30f3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<p class=\"is-style-sango-paragraph-idea-alt\">ConfigureAwait(false)\u306e\u9069\u5207\u306a\u4f7f\u7528\u306b\u3088\u308a\u3001\u4e0d\u8981\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5207\u308a\u66ff\u3048\u3092\u9632\u3050<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u4e26\u5217\u51e6\u7406\u3068\u9069\u5207\u306a\u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306e\u9078\u629e\u3067\u51e6\u7406\u52b9\u7387\u3092\u6700\u9069\u5316<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u30e1\u30e2\u30ea\u30d7\u30fc\u30eb\u3068ValueTask\u306e\u6d3b\u7528\u306b\u3088\u308a\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u524a\u6e1b<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406\u3068\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u3067\u4fe1\u983c\u6027\u3092\u78ba\u4fdd<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u3092\u63a1\u7528<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u7d99\u7d9a\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u3068\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u91cd\u8981\u6027<\/p>\n\n\n\n<p class=\"is-style-sango-paragraph-idea-alt\">\u30ad\u30e3\u30f3\u30bb\u30ec\u30fc\u30b7\u30e7\u30f3\u30c8\u30fc\u30af\u30f3\u306b\u3088\u308b\u51e6\u7406\u306e\u9069\u5207\u306a\u5236\u5fa1<\/p>\n<\/div><\/div>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u62bc\u3055\u3048\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":3170,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,61,75],"tags":[],"class_list":{"0":"post-1662","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-csharp","8":"category-csharp-syntax","9":"category-75"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1662"}],"version-history":[{"count":8,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1662\/revisions"}],"predecessor-version":[{"id":3222,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1662\/revisions\/3222"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/media\/3170"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}