Async API

Async API

All static and instance methods have async counterparts. File I/O is truly asynchronous — source files are read and output files are written using async streams. CPU-bound conversion runs on the thread pool.

Note
The async API is available on .NET 6.0+ and .NET Framework 4.6.2+.

Static async methods

using GroupDocs.Markdown;

// Convert to string
string md = await MarkdownConverter.ToMarkdownAsync("report.docx");

// Convert to file
await MarkdownConverter.ToFileAsync("report.docx", "report.md");

// With options
var options = new ConvertOptions { IncludeFrontMatter = true };
string md = await MarkdownConverter.ToMarkdownAsync("report.docx", null, options);

// Get document info
DocumentInfo info = await MarkdownConverter.GetInfoAsync("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages");

Instance async methods

using GroupDocs.Markdown;

using var converter = new MarkdownConverter("report.docx");

// Convert to string
ConvertResult result = await converter.ConvertAsync();
Console.WriteLine(result.Content);

// Convert with options
var options = new ConvertOptions { HeadingLevelOffset = 1 };
result = await converter.ConvertAsync(options);

// Convert to file
await converter.ConvertAsync("output.md");

// Get document info
DocumentInfo info = await converter.GetDocumentInfoAsync();

Cancellation

All async methods accept a CancellationToken:

using GroupDocs.Markdown;

var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30));

try
{
    string md = await MarkdownConverter.ToMarkdownAsync(
        "large-document.pdf",
        cancellationToken: cts.Token);
}
catch (TaskCanceledException)
{
    Console.WriteLine("Conversion timed out.");
}

ASP.NET Core example

[ApiController]
[Route("api/[controller]")]
public class ConvertController : ControllerBase
{
    [HttpPost("to-markdown")]
    public async Task<IActionResult> ConvertToMarkdown(IFormFile file)
    {
        using var stream = file.OpenReadStream();
        using var converter = new MarkdownConverter(stream);

        ConvertResult result = await converter.ConvertAsync(
            new ConvertOptions { Flavor = MarkdownFlavor.GitHub });

        return Content(result.Content, "text/markdown");
    }
}