【问题标题】:How to return on Task<int>?如何返回 Task<int>?
【发布时间】:2018-06-19 19:24:20
【问题描述】:

我有这个代码:

static void Main(string[] args)
{
    // start import process
    Task<int> task = StartImportProcess();
    task.Wait();
    // check result

    // process finished
    Console.ReadKey();
}

static async Task<int> StartImportProcess()
{
    int result = 0;
    result = await ImportCustomers();

    // some other async/await operations

    return result;
}

static Task<int> ImportCustomers()
{
    // some heavy operations

    Thread.Sleep(1000);

    return 1; // <<< what should I return?
}

使用Taskasync/await。我想返回一个int 作为任务的结果。我应该返回哪个对象? return 1; 不起作用。

【问题讨论】:

标签: c# async-await task


【解决方案1】:

你应该使用Task.FromResult,(并且不要使用Task中的Thread.Sleep):

static async Task<int> ImportCustomers()
{
    // some heavy operations

    await Task.Delay(1000);

    // Already awaited, so we can return the result as-is.
    return 1;

    // Or: if not already awaited anything,
    //     and also with non-async tasks, use:
    return Task.FromResult(1);
}

【讨论】:

  • 嗯。但是 Task.Delay(1000) 将如何实现呢?我相信像public static Task Delay(int millisecondsDelay) { Thread.Sleep(millisecondsDelay); return Task.FromResult(1); } 这样的东西?
  • 你从哪里弄来的这些废话?实现完全不同:referencesource.microsoft.com/#mscorlib/system/threading/Tasks/….
  • "没有等待:方法需要异步吗?" - 不,OP的方法不是async
  • 事实是:我需要在该函数中进行繁重的操作。不再在内部使用 await 。如果您看到它不是异步该方法。我该怎么做?
  • @PatrickHofman - 我的想法是 OP 输入 Thread.Sleep(1000); 只是为了模拟繁重的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2012-10-20
  • 2016-09-07
  • 2014-08-14
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多