使用任务:继续需要我的业务逻辑不需要的返回语句



我昨天开始在我的一个小项目中使用任务。在代码中设置任务逻辑后,我意识到我被迫在 ContinueWith() 函数中使用 return 语句。

有没有办法避免在 ContinueWith 中返回,即使myTask首先需要返回一个对象?

Task<List<Object>> myTask = Task<List<Object>>.Factory.StartNew(() =>
{
    //business logic creating an Object to return 
    //return Object created
})
.ContinueWith<List<Object>>((antecedant) =>
{
    //business logic : needs to use antecedant
    return null; //can i get rid of this? I don't need to return an object in this section
}, TaskScheduler.FromCurrentSynchronizationContext());

让我们说返回空语句让我很烦恼......

注意:为了回应Yuval的评论,我使用的是.net框架4.5

溶液

根据CoryNelson的评论,我想出了这个代码。它完全符合我的需求。

Task<List<Object>> myTask = Task<List<Object>>.Factory.StartNew(() =>
{
    //business logic creating an Object to return 
    //return Object created
});
Task myFollowingTask = myTask.ContinueWith((antecedant) =>
{
    //business logic using antecedant
}, TaskScheduler.FromCurrentSynchronizationContext());

我不再需要在继续中使用返回语句。

这是我去获取所需信息的地方。请参阅代码示例

有两种方法可以解决这个问题:

拆分任务变量的声明:

Task<List<Object>> myTask = Task<List<Object>>.Factory.StartNew(() =>
{
    //business logic creating an Object to return 
    //return Object created
});
Task taskContinuation = myTask.ContinueWith((antecedant) =>
{
    //business logic : needs to use antecedant
}, TaskScheduler.FromCurrentSynchronizationContext());

这将允许您独立运行这两个任务,其中continuation属于 Task 类型。

第二种,也是更好的方法 IMO 将使用async-await

public async Task CreateFooAsync()
{
    List<object> objects = await Task.Run(() => /* Create object */);
    // here you're on the UI thread, continue execution flow as normal.
}

请注意,async-await语义意味着第一个任务将异步等待创建对象。

如果要在任务之外访问结果,则需要将该结果提供给myTask 的输出。

Task<List<Object>> myTask = Task<List<Object>>.Factory.StartNew(() =>
{
    //business logic creating an Object to return 
    //return Object created
})
.ContinueWith((antecedant) =>
{
    //business logic : needs to use antecedant
    return antecedant.Result;
}, TaskScheduler.FromCurrentSynchronizationContext());

这将导致myTask.ResultContinueWith中的antecedant.Result相同。

相关内容

  • 没有找到相关文章

最新更新