Итак, у меня есть задача, которая берет путь и открывает файл.
private async Task OpenFileAsync(string strFilePath)
{
doTheOpenThing.
}
До сих пор это была функция void, и все было в порядке, но мы знаем, что нам нужно поддерживать большие файлы, и мы хотели чтобы открыть файл с помощью другого потока, чтобы не блокировать поток пользовательского интерфейса.
Я использую reactiveui в своем приложении, и у меня есть метод, который прослушивает задачи и запускает их по мере их поступления.
_sessionContext.WhenAnyValue(t => t.NotifyNewTreadTask).Where(t => t != null).Subscribe(t => DoAsyncTask(t));
Где
private async void DoAsyncTask(Task task)
{
if (task != null)
{
await DoThreadAction(() => task);
}
_sessionContext.NotifyNewTreadTask = null;
}
А DoThreadAction просто запускает задачу
await Task.Run(async () => await action.Invoke());
Теперь моя проблема заключается в назначении NotifyNewTreadTask .
Когда бы я ни делал NotifyNewTreadTask = OpenFileAsync(path);
Он просто запускает задачу OpenFileAsyn c. Как передать задачу OpenFileASyn c в NotifyNewTreadTask без ее запуска.
Task? NotifyNewTreadTask { get; set; } NotifyNewTreadTask is a property.