Асинхронное ведение журнала, генерирующее исключение NullReferenceException

Я пытаюсь асинхронно записывать некоторую информацию в SQL Server внутри действия контроллера MVC 4, нацеленного на .NET 4.0, используя AsyncTargetingPack. Я бы прыгнул прямо к .NET 4.5, но мое приложение живет в Azure имы'все еще жду обновления...

Этот код работает как положено (в мою базу данных записана строка без исключений):

public class SystemActionLogger : ISystemActionLogger
{
    private readonly ActionBlock actionBlock;

    public SystemActionLogger(ISystemActionLogEntryRepository repository)
    {
        actionBlock = new ActionBlock(
            entry => TaskEx.Run(async () =>
                {
                    string data = await JsonConvert.SerializeObjectAsync(entry.Item2);
                    await repository.PersistAsync(new SystemActionLogEntry(entry.Item1, data));
                }));
    }

    public void Log(SystemAction systemAction, object data)
    {
        actionBlock.Post(new Tuple(systemAction, data));
    }
}

И этот код генерирует исключение NullReferenceException:

public class SystemActionLogger : ISystemActionLogger
{
    private readonly ActionBlock actionBlock;

    public SystemActionLogger(ISystemActionLogEntryRepository repository)
    {
        actionBlock = new ActionBlock(async entry =>
            {
                string data = await JsonConvert.SerializeObjectAsync(entry.Item2);
                await repository.PersistAsync(new SystemActionLogEntry(entry.Item1, data));
            });
    }

    public void Log(SystemAction systemAction, object data)
    {
        actionBlock.Post(new Tuple(systemAction, data));
    }
}

NullReferenceException: "В экземпляре объекта не задана ссылка на объект."

Server stack trace: 
   at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext)
   at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
   at System.Web.LegacyAspNetSynchronizationContext.CallCallbackPossiblyUnderLock(SendOrPostCallback callback, Object state)
   at System.Web.LegacyAspNetSynchronizationContext.CallCallback(SendOrPostCallback callback, Object state)
   at System.Runtime.CompilerServices.TaskAwaiter.c__DisplayClassa.b__0(Task param0)

Exception rethrown at [0]: 
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__1(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()

Я не вижу исключения, поскольку это весь внешний код. Я неЯ не понимаю, почему второй блок кода не работает. Это код, который я изначально написал.

Что я делаю неправильно?

Ответы на вопрос(3)

Ваш ответ на вопрос