スポンサーリンク

.NET Core 3 Preview 2 が出ました。 #donetjp

情報源: Announcing .NET Core 3 Preview 2 | .NET Blog

  • C# 8.0対応
    • usingで{}も()も不要に(詳しくは情報源へ)
    • スイッチ式(詳しくは情報源へ)
    • 非同期ストリーム
  • IEEE 浮動小数点取扱の改善
    • IEEE 754-2008への準拠
    • パースの改善(マイナス0の取扱など)
    • Math APIの改善(詳しくは情報源へ)
  • .NETプラットフォーム依存組み込み関数
    • SIMDやビット操作などで、特定のCPUアーキに依存するAPIを追加(.NET FrameworkでCPUアーキでの違いを極力取り除く方向だったので、.NET Coreになってからの大きな方向転換)
  • 高速インボックスJSONライター&JSONドキュメントの紹介(System.Text.Json)
  • Raspberry PIでのGPIOのサポート
  • ローカルdotnetツールの改善
  • アセンブリのアンローダビリティ(詳しくは情報源へ)
  • Windowsネイティブでの相互運用性
    • CoCreate COM APIとActivate WinRT APIの機能追加(詳しくは情報源へ)
  • WPFとWindows Formsの追加(詳しくは情報源へ)
  • Visual Studioサポート。VS 2019 Preview2以降が必要です。
  • デスクトップアプリケーションのMSIXによるデプロイ(詳しくは情報源へ)
  • snapによるLinuxへのインストール(詳しくは情報源へ)
  • サポートプラットフォーム(OS)
    • Windows Client: 7, 8.1, 10 (1607+)
    • Windows Server: 20012 R2 SP1+
    • macOS: 10.12+
    • RHEL: 6+
    • Fedora: 26+
    • Ubuntu: 16.04+
    • Debian: 9+
    • SLES: 12+
    • openSUSE: 42.3+
    • Alpine: 3.8+
  • サポートプラットフォーム(CPUアーキ)
    • x64 on Windows, macOS, and Linux
    • x86 on Windows
    • ARM32 on Windows and Linux
    • ARM64 on Linux

Visual Studio 2019 Preview 2でのWindows Forms/WPF

Visual Studio 2019 Preview 2がインストールされた環境に、.NET Core 3.0 Preview 2をインストールするとプロジェクトウィザードに、Windows Fromes(.NET Core)とWPF(.NET Core)が追加されます。

残念ながらGUIのデザイナーは使えません。(WPFも同様)

COM Interop

以下のサンプルがちゃんと動きました。

samples/core/extensions/ExcelDemo at master · dotnet/samples

ただし、COMの参照はVSのGUIから出来ないのでcsprojファイルに手書きになります。(上のサンプル使う場合はそのままで良いです)

C# Async Stream

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<span class="hljs-keyword">using</span> System;
<span class="hljs-keyword">using</span> System.Collections.Generic;
<span class="hljs-keyword">using</span> System.Threading.Tasks;
<span class="hljs-keyword">namespace</span> <span class="hljs-title">AsyncStream</span>
{
<span class="hljs-keyword">class</span> <span class="hljs-title">Program</span>
{
<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>)</span>
{
<span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-function"><span class="hljs-keyword">var</span> x <span class="hljs-keyword">in</span> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-number">5</span>, <span class="hljs-number">1000</span></span>))</span>
{
Console.WriteLine(x);
}
}
<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> IAsyncEnumerable</span><int><span class="hljs-function"> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> n, <span class="hljs-keyword">int</span> t</span>)</span>
{
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < n; i++)
{
<span class="hljs-keyword">await</span> Task.Delay(t);
<span class="hljs-keyword">yield</span> <span class="hljs-keyword">return</span> i;
}
}
}
}</int>
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">using</span> System.Collections.Generic; <span class="hljs-keyword">using</span> System.Threading.Tasks; <span class="hljs-keyword">namespace</span> <span class="hljs-title">AsyncStream</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">Program</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>)</span> { <span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-function"><span class="hljs-keyword">var</span> x <span class="hljs-keyword">in</span> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-number">5</span>, <span class="hljs-number">1000</span></span>))</span> { Console.WriteLine(x); } } <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> IAsyncEnumerable</span><int><span class="hljs-function"> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> n, <span class="hljs-keyword">int</span> t</span>)</span> { <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < n; i++) { <span class="hljs-keyword">await</span> Task.Delay(t); <span class="hljs-keyword">yield</span> <span class="hljs-keyword">return</span> i; } } } }</int>
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace AsyncStream
{
    class Program
    {
        static async Task Main(string[] args)
        {
            await foreach (var x in M(5, 1000))
            {
                Console.WriteLine(x);
            }
        }

        static async IAsyncEnumerable M(int n, int t)
        {
            for (int i = 0; i < n; i++)
            {
                await Task.Delay(t);
                yield return i;
            }
        }
    }
}
タイトルとURLをコピーしました