diff --git a/src/Nito.AsyncEx.Tasks/Interop/ApmAsyncFactory.cs b/src/Nito.AsyncEx.Tasks/Interop/ApmAsyncFactory.cs
index e694b90..59a834d 100644
--- a/src/Nito.AsyncEx.Tasks/Interop/ApmAsyncFactory.cs
+++ b/src/Nito.AsyncEx.Tasks/Interop/ApmAsyncFactory.cs
@@ -1,4 +1,5 @@
using System;
+using System.Threading;
using System.Threading.Tasks;
using Nito.AsyncEx.Synchronous;
@@ -18,6 +19,18 @@ public static class ApmAsyncFactory
/// The asynchronous operation, to be returned by the Begin method of the APM pattern.
public static IAsyncResult ToBegin(Task task, AsyncCallback callback, object state)
{
+ if (task == null)
+ {
+ throw new ArgumentNullException(nameof(task));
+ }
+
+ if (task.IsCompleted)
+ {
+ // we need this so it throws in case of faulted task
+ task.GetAwaiter().GetResult();
+ return new CompletedAsyncResult(state);
+ }
+
var tcs = new TaskCompletionSource