using System.Threading; using System.Threading.Tasks; public static class ADX2AddCueSheetToTask { public static Task ToTask(this CriAtomCueSheet cueSheet, CancellationToken ct) { var tcs = new TaskCompletionSource(); if (ct != CancellationToken.None) { ct.Register(() => tcs.TrySetCanceled(ct)); } Task.Run(() => { while (cueSheet.loaderStatus == CriAtomExAcbLoader.Status.Loading) { Task.Yield(); } tcs.TrySetResult(cueSheet); }, ct); return tcs.Task; } }