.NET ヘルプ

Hangfire .NET Core(開発者向けの動作方法)

チペゴ
チペゴ・カリンダ
2024年1月14日
共有:

現代のアプリケーション開発では、大規模なタスクを処理するためにバックグラウンドタスクを処理する必要があります。このようなシナリオでは、バックグラウンドジョブハンドラーを使用して複数のジョブを実行する必要があります。 多くのジョブハンドラーが存在しますが、C# .NET Coreアプリケーション用のバックグラウンド親ジョブハンドラーの一つとしてHangfireがあります。このブログでは、Hangfireのバックグラウンドジョブと、IronPDF for PDF Generationなどのパッケージを使用してバックグラウンドでPDFドキュメントを生成する方法について学びます。

イントロダクション

Hangfire は、バックグラウンドジョブの管理と実行のための信頼性が高く柔軟なフレームワークを提供することにより、ASP.NET Core または .NET Core 6 Web API アプリケーションでのバックグラウンド処理の実装を簡素化します。 HangfireはNuGetパッケージとして利用可能であり、以下のように.NET CLIを使用してインストールできます。

dotnet add package Hangfire --version 1.8.6

.NET Core Web API での実装

Hangfireについて学ぶために、簡単な.NET Core APIアプリケーションを作成し、CLIを使用してHangfireをインストールしましょう。

dotnet new webapi -n HangfireDemo
cd HangfireDemo
dotnet build
dotnet add package Hangfire --version 1.8.6
dotnet build

ここでは .NET CLI を使用して簡単な天気 REST API を作成しています。 最初の行では、APIエンドポイントを実行するためのCore Web APIプロジェクトとしてHangfireDemoという名前のプロジェクトを作成します(ASP.NET Coreも作成可能です)。 2行目は、新しく作成したフォルダー "HangfireDemo" に移動し、プロジェクトをビルドするためのものです。 次に、Hangfire NuGet パッケージをプロジェクトに追加し、再度ビルドしました。 その後、お好みのエディター、Visual Studio 2022 または JetBrains Rider でプロジェクトを開くことができます。 プロジェクトを実行すると、以下のようにSwaggerを見ることができます。

Hangfire .NET Core(開発者向けの仕組み):図1 - Swagger

ここでは、日付、概要、および温度を返す天気のGET APIを確認できます。

Hangfire .NET Core(開発者向けの動作方法):図2 - 天気GET API

では、Hangfire バックグラウンドジョブプロセッサを追加しましょう。 Visual Studioでプロジェクトを開く。

Hangfire ジョブ プロセッサーを追加

アプリケーション内でHangfireを設定します。これは通常、Startup.csファイル内で行われます。これにはジョブストレージの設定とHangfireサーバーの初期化が含まれます。

// Startup.cs
using Hangfire;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Hangfire services
        services.AddHangfire(config => config.UseSqlServerStorage("your_connection_string"));
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // Configure Hangfire
        app.UseHangfireServer();
        app.UseHangfireDashboard();
        // Your other configuration settings
    }
}
// Startup.cs
using Hangfire;
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add Hangfire services
        services.AddHangfire(config => config.UseSqlServerStorage("your_connection_string"));
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // Configure Hangfire
        app.UseHangfireServer();
        app.UseHangfireDashboard();
        // Your other configuration settings
    }
}
' Startup.cs
Imports Hangfire
Public Class Startup
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		' Add Hangfire services
		services.AddHangfire(Function(config) config.UseSqlServerStorage("your_connection_string"))
	End Sub
	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IHostingEnvironment)
		' Configure Hangfire
		app.UseHangfireServer()
		app.UseHangfireDashboard()
		' Your other configuration settings
	End Sub
End Class
$vbLabelText   $csharpLabel

ConfigureServicesは、Hangfireの新しく作成されたジョブを保存するためのストレージを追加するために使用されます。 ここではSQL Serverデータベースが使用されています。 SQL Serverの接続文字列は"your_connection_string"に置き換えてください。 インメモリストレージは、Hangfire.InMemoryを使用して行うこともできます。

dotnet add package Hangfire.InMemory --version 0.6.0

置き換える

services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });
services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });
services.AddHangfire(Sub(configuration)
	configuration.UseInMemoryStorage()
End Sub)
$vbLabelText   $csharpLabel

バックグラウンド ジョブを作成する

バックグラウンドジョブとして実行したいメソッドを定義します。 これらのメソッドは、引数なしのコンストラクタを持つクラスの静的メソッドまたはインスタンスメソッドである必要があります。 ジョブは定期的なジョブとして実行することも、多くのジョブを実行することもできます。

public class MyBackgroundJob
{
    public void ProcessJob()
    {
        // Your background job logic, recurring job or multiple jobs
        Console.WriteLine("Background job is running...");
    }
}
public class MyBackgroundJob
{
    public void ProcessJob()
    {
        // Your background job logic, recurring job or multiple jobs
        Console.WriteLine("Background job is running...");
    }
}
Public Class MyBackgroundJob
	Public Sub ProcessJob()
		' Your background job logic, recurring job or multiple jobs
		Console.WriteLine("Background job is running...")
	End Sub
End Class
$vbLabelText   $csharpLabel

ジョブをキューに追加

Hangfire API を使用してバックグラウンドジョブをエンキューします。 特定の時間、遅延後、または定期的にバックグラウンドジョブをスケジュールして実行することができます。

// Enqueue a job to run immediately
BackgroundJob.Enqueue<MyBackgroundJob>(x => x.ProcessJob());
// Schedule a job to run after 5 min delay, delayed job
BackgroundJob.Schedule<MyBackgroundJob>(x => x.ProcessJob(), TimeSpan.FromMinutes(5));
// Schedule a recurring job / recurring jobs using job Id
RecurringJob.AddOrUpdate<MyBackgroundJob>("job Id", x => x.ProcessJob(), Cron.Daily);
// Enqueue a job to run immediately
BackgroundJob.Enqueue<MyBackgroundJob>(x => x.ProcessJob());
// Schedule a job to run after 5 min delay, delayed job
BackgroundJob.Schedule<MyBackgroundJob>(x => x.ProcessJob(), TimeSpan.FromMinutes(5));
// Schedule a recurring job / recurring jobs using job Id
RecurringJob.AddOrUpdate<MyBackgroundJob>("job Id", x => x.ProcessJob(), Cron.Daily);
' Enqueue a job to run immediately
BackgroundJob.Enqueue(Of MyBackgroundJob)(Function(x) x.ProcessJob())
' Schedule a job to run after 5 min delay, delayed job
BackgroundJob.Schedule(Of MyBackgroundJob)(Function(x) x.ProcessJob(), TimeSpan.FromMinutes(5))
' Schedule a recurring job / recurring jobs using job Id
RecurringJob.AddOrUpdate(Of MyBackgroundJob)("job Id", Function(x) x.ProcessJob(), Cron.Daily)
$vbLabelText   $csharpLabel

ハングファイアダッシュボードとサーバー

Hangfireのダッシュボードとサーバーは、Configureメソッドに追加できます。

// Run Hangfire server
app.UseHangfireServer();
app.UseHangfireDashboard();
// Run Hangfire server
app.UseHangfireServer();
app.UseHangfireDashboard();
' Run Hangfire server
app.UseHangfireServer()
app.UseHangfireDashboard()
$vbLabelText   $csharpLabel

サーバーは、ConfigureServices にも追加できます。

services.AddHangfireServer();
services.AddHangfireServer();
services.AddHangfireServer()
$vbLabelText   $csharpLabel

ファイア・アンド・フォーゲット・ジョブズ

//Fire and forget job / Fire and forget jobs are executed only once and almost immediately after creation.
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!")); //jobId for Fire and forget job
//Fire and forget job / Fire and forget jobs are executed only once and almost immediately after creation.
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!")); //jobId for Fire and forget job
'Fire and forget job / Fire and forget jobs are executed only once and almost immediately after creation.
Dim jobId = BackgroundJob.Enqueue(Sub() Console.WriteLine("Fire-and-forget!")) 'jobId for Fire and forget job
$vbLabelText   $csharpLabel

定期ジョブ

//Recurring jobs fire many times on the specified CRON schedule.
RecurringJob.AddOrUpdate( "myrecurringjob",() => Console.WriteLine("Recurring!"),Cron.Daily);
//Recurring jobs fire many times on the specified CRON schedule.
RecurringJob.AddOrUpdate( "myrecurringjob",() => Console.WriteLine("Recurring!"),Cron.Daily);
'Recurring jobs fire many times on the specified CRON schedule.
RecurringJob.AddOrUpdate("myrecurringjob",Sub() Console.WriteLine("Recurring!"),Cron.Daily)
$vbLabelText   $csharpLabel

遅延ジョブ

//Delayed jobs are executed only once too, but not immediately, after a certain specific interval.
var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"),
    TimeSpan.FromDays(7));
//Delayed jobs are executed only once too, but not immediately, after a certain specific interval.
var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"),
    TimeSpan.FromDays(7));
'Delayed jobs are executed only once too, but not immediately, after a certain specific interval.
Dim jobId = BackgroundJob.Schedule(Sub() Console.WriteLine("Delayed!"), TimeSpan.FromDays(7))
$vbLabelText   $csharpLabel

連続

//Continuation jobs are executed when its parent job has been finished, immediate child job
BackgroundJob.ContinueJobWith(jobId,() => Console.WriteLine("Continuation!"));
//Continuation jobs are executed when its parent job has been finished, immediate child job
BackgroundJob.ContinueJobWith(jobId,() => Console.WriteLine("Continuation!"));
'Continuation jobs are executed when its parent job has been finished, immediate child job
BackgroundJob.ContinueJobWith(jobId,Sub() Console.WriteLine("Continuation!"))
$vbLabelText   $csharpLabel

バッチジョブ

//Batch is a group of background jobs that is created atomically and considered as a single entity. Two jobs can be run as below.
var batchId = BatchJob.StartNew(x =>
{
    x.Enqueue(() => Console.WriteLine("Job 1"));
    x.Enqueue(() => Console.WriteLine("Job 2"));
});
//Batch is a group of background jobs that is created atomically and considered as a single entity. Two jobs can be run as below.
var batchId = BatchJob.StartNew(x =>
{
    x.Enqueue(() => Console.WriteLine("Job 1"));
    x.Enqueue(() => Console.WriteLine("Job 2"));
});
'Batch is a group of background jobs that is created atomically and considered as a single entity. Two jobs can be run as below.
Dim batchId = BatchJob.StartNew(Sub(x)
	x.Enqueue(Sub() Console.WriteLine("Job 1"))
	x.Enqueue(Sub() Console.WriteLine("Job 2"))
End Sub)
$vbLabelText   $csharpLabel

バッチ継続ジョブ

Batch continuation is fired when all background jobs in a parent batch are finished.
BatchJob.ContinueBatchWith(batchId, x =>
{
    x.Enqueue(() => Console.WriteLine("Last Job"));
});
Batch continuation is fired when all background jobs in a parent batch are finished.
BatchJob.ContinueBatchWith(batchId, x =>
{
    x.Enqueue(() => Console.WriteLine("Last Job"));
});
Dim tempVar As Boolean = TypeOf continuation Is fired
Dim [when] As fired = If(tempVar, CType(continuation, fired), Nothing)
Batch tempVar all background jobs in a parent batch are finished.BatchJob.ContinueBatchWith(batchId, Sub(x)
	x.Enqueue(Sub() Console.WriteLine("Last Job"))
End Sub)
$vbLabelText   $csharpLabel

ダッシュボード

Hangfire Dashboardでは、バックグラウンドジョブに関するすべての情報を見つけることができます。 これはOWINミドルウェアとして書かれているため(OWINに詳しくなくても心配ありません)、ASP.NET、ASP.NET MVC、Nancy、およびServiceStackアプリケーションに組み込むことができ、OWIN Self-Host機能を使用して、コンソールアプリケーションやWindowsサービス内でダッシュボードをホストすることもできます。

ビューでダッシュボードが有効になっている場合、ダッシュボードは/hangfire/拡張子にあります。 このダッシュボードでは、バックグラウンド実行ジョブの管理、バックグラウンドジョブのスケジュール設定、ファイア・アンド・フォーゲットジョブの表示、および定期的なジョブの表示が可能です。 ジョブIDを使用してジョブを識別できます。

ライブ処理

Hangfire .NET Core(開発者向けの動作方法):図3 - ジョブのライブ処理

成功したジョブ

以下に成功したジョブが表示されます。

Hangfire .NET Core(開発者のための仕組み):図4 - 成功したジョブ

スケジュールされたジョブ

Hangfire .NET Core (開発者向けの動作方法): 図 5 - スケジュールされたジョブ

既に設定された構成に基づいて、あなたのアプリケーションが実行されると、Hangfireがバックグラウンドジョブの処理を行います。

より高度な設定オプションと機能については、Hangfire のドキュメントを確認することを忘れないでください: Hangfire ドキュメント および完全なコードは GitHub Hangfire デモ で見つけることができます。

IronPDFの紹介

IronPDF for .NET PDF Generation は、PDFドキュメントの読み取りと生成を支援する Iron SoftwareのPDFライブラリ からの NuGet パッケージです。 それは、スタイル情報を持つフォーマット済みのドキュメントを簡単にPDFに変換できます。 IronPDFはHTMLコンテンツから簡単にPDFを生成することができます。 それは、URLからHTMLをダウンロードしてPDFを生成することができます。

IronPDFの主な魅力は、レイアウトとスタイルを保持するHTML to PDF変換機能です。 それはウェブコンテンツからPDFを作成でき、レポート、請求書、ドキュメントに最適です。 この機能は、HTMLファイル、URL、およびHTML文字列をPDFに変換することをサポートします。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDFを始めましょう

今日から無料トライアルでIronPDFをあなたのプロジェクトで使い始めましょう。

最初のステップ:
green arrow pointer


IronPDFライブラリのインストール

NuGet パッケージマネージャーを使用してインストール

Hangfire .NET プロジェクトに IronPDF を統合するために、NuGet パッケージ マネージャーを使用する手順は次のとおりです:

  1. Visual Studioを開き、ソリューションエクスプローラーでプロジェクトを右クリックします。

  2. コンテキストメニューから「NuGetパッケージの管理...」を選択してください。

  3. 「参照」タブに移動して、「IronPDF」を検索してください。

  4. 検索結果からIronPDFライブラリを選択し、インストールボタンをクリックします。

  5. ライセンス契約のプロンプトをすべて受け入れます。

    プロジェクトにIronPDFをパッケージ マネージャー コンソール経由で含めたい場合は、パッケージ マネージャー コンソールで以下のコマンドを実行してください:

Install-Package IronPdf

それは、プロジェクトにIronPDFを取得してインストールします。

NuGetウェブサイトを使用してインストール

IronPDFの機能、互換性、その他のダウンロードオプションに関する詳細な概要については、NuGetウェブサイトのIronPDFページ https://www.nuget.org/packages/IronPdf をご覧ください。

DLLを使ってインストール

別の方法として、IronPDFのdllファイルを使用してプロジェクトに直接組み込むことができます。このIronPDF Direct DownloadからDLLを含むZIPファイルをダウンロードしてください。 解凍して、プロジェクトにDLLを含めてください。

今度は、HTTPリクエストパイプラインのウェブサイトをPDFファイルとしてダウンロードするためのバックグラウンド処理ジョブを追加するようにアプリケーションを修正しましょう。

namespace HangfireDemo.Core;
public class PdfGenerationJob
{
    public void Start(string website)
    {
        // Create a PDF from any existing web page
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderUrlAsPdf(website);
        var filePath = AppContext.BaseDirectory + "result.pdf";
        pdf.SaveAs(filePath);
    }
}
namespace HangfireDemo.Core;
public class PdfGenerationJob
{
    public void Start(string website)
    {
        // Create a PDF from any existing web page
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderUrlAsPdf(website);
        var filePath = AppContext.BaseDirectory + "result.pdf";
        pdf.SaveAs(filePath);
    }
}
Namespace HangfireDemo.Core
	Public Class PdfGenerationJob
		Public Sub Start(ByVal website As String)
			' Create a PDF from any existing web page
			Dim renderer As New ChromePdfRenderer()
			Dim pdf As PdfDocument = renderer.RenderUrlAsPdf(website)
			Dim filePath = AppContext.BaseDirectory & "result.pdf"
			pdf.SaveAs(filePath)
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

IronPDFには、URLからウェブサイトをダウンロードし、PDFドキュメントとして保存するための組み込みメソッドがあります。 このメソッドを使用して、ジョブの一環としてダウンロードし、一時的な場所に保存します。 このバックグラウンドジョブは、複数のウェブサイトURLを取り込み、PDFとして保存するように変更できます。

次に、PDF生成とダウンロードAPIを公開するためのコントローラーを追加します。

using Hangfire;
using HangfireDemo.Core;
using Microsoft.AspNetCore.Mvc;
namespace HangfireDemo.Controllers;
[ApiController]
[Route("[controller]")]
public class PdfGeneratorController : ControllerBase
{
    [HttpGet("request", Name = "Start PDF Generation")]
    public void Start([FromQuery] string websiteUrl)
    {
        BackgroundJob.Enqueue<PdfGenerationJob>(x => x.Start(websiteUrl));
    }
    [HttpGet("result", Name = "Download PDF Generation")]
    public IActionResult WebResult()
    {
        var filePath = AppContext.BaseDirectory + "result.pdf";
        var stream = new FileStream(filePath, FileMode.Open);
       return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = "website.pdf" };
    }
}
using Hangfire;
using HangfireDemo.Core;
using Microsoft.AspNetCore.Mvc;
namespace HangfireDemo.Controllers;
[ApiController]
[Route("[controller]")]
public class PdfGeneratorController : ControllerBase
{
    [HttpGet("request", Name = "Start PDF Generation")]
    public void Start([FromQuery] string websiteUrl)
    {
        BackgroundJob.Enqueue<PdfGenerationJob>(x => x.Start(websiteUrl));
    }
    [HttpGet("result", Name = "Download PDF Generation")]
    public IActionResult WebResult()
    {
        var filePath = AppContext.BaseDirectory + "result.pdf";
        var stream = new FileStream(filePath, FileMode.Open);
       return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = "website.pdf" };
    }
}
Imports Hangfire
Imports HangfireDemo.Core
Imports Microsoft.AspNetCore.Mvc
Namespace HangfireDemo.Controllers
	<ApiController>
	<Route("[controller]")>
	Public Class PdfGeneratorController
		Inherits ControllerBase

		<HttpGet("request", Name := "Start PDF Generation")>
		Public Sub Start(<FromQuery> ByVal websiteUrl As String)
			BackgroundJob.Enqueue(Of PdfGenerationJob)(Function(x) x.Start(websiteUrl))
		End Sub
		<HttpGet("result", Name := "Download PDF Generation")>
		Public Function WebResult() As IActionResult
			Dim filePath = AppContext.BaseDirectory & "result.pdf"
			Dim stream = New FileStream(filePath, FileMode.Open)
		   Return New FileStreamResult(stream, "application/octet-stream") With {.FileDownloadName = "website.pdf"}
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

以下に、ウェブサイトのURLを取得して、ダウンロードを開始するためのバックグラウンドジョブを開始するためのAPIを2つ作成しました。 別のAPIは、PDFの結果をダウンロードするためのものです。 APIの例は以下のようになります。

Hangfire .NET Core(開発者にとっての動作方法):図7 - PDFGenerator API

結果は以下のようになります。

Hangfire .NET Core(開発者向けの動作方法): 図8 - 出力

ライセンス(無料トライアル利用可能)

上記のコードを透かしなしで動作させるには、ライセンスキーが必要です。 開発者はIronPDF Free Trialに登録すると、試用ライセンスを利用できます。 トライアルライセンスにクレジットカードは必要ありません。 あなたの電子メールIDを提供し、無料トライアルに登録することができます。

結論

HangfireとIronPDFを組み合わせることで、バックグラウンドでPDFを生成およびダウンロードすることができます。 ハングファイアをさまざまなプログラミングパラダイムで使用して、長時間実行されるタスクを処理することができます。 IronPDFは、柔軟で使いやすいPDF生成ソリューションを提供します。 IronPDFについてもっと知るには、IronPDF Documentationをご覧ください。

また、Iron Software Product Suiteの他のツールを探索することもできます。これらのツールは、あなたのコーディングスキルを向上させ、現代のアプリケーション要件を達成するのに役立ちます。

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
C#のNull合体演算子(開発者向けの仕組み)
次へ >
C# キュー(開発者向けの仕組み)