簡體   English   中英

異步任務如何從方法返回值

[英]Async Task how to return value back from a method

CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();

Task tasks = PeriodicTaskFactory.Start(() => LongRunningOperation(), intervalInMilliseconds: 1000, synchronous: false, cancelToken: cancellationTokenSource.Token);

int taskId = Task.WaitAny(tasks);

和我的LongRunningOperation

private String LongRunningOperation()
{
...
return proj.Name;
}

但問題是如何從Task獲取LongRunningOperation方法的值。 方法tasks.Resultstasks.Results不存在。 我想從每個任務中獲取價值。

我從這里得到PeriodicTaskFactory類

是否有基於任務的System.Threading.Timer替換?

謝謝

Task沒有返回值; Task<T>確實如此。

您必須修改PeriodicTaskFactory代碼以返回Task<T> ,然后創建Task<string>對象。 該方法還應該接受Func<T> (沒有參數,返回T)而不是Action ,它沒有返回值。

public static Task<T> Start<T>(Func<T> func,
      int intervalInMilliseconds = Timeout.Infinite,
      int delayInMilliseconds = 0,
      int duration = Timeout.Infinite,
      int maxIterations = -1,
      bool synchronous = false,
      CancellationToken cancelToken = new CancellationToken(),
      TaskCreationOptions periodicTaskCreationOptions = TaskCreationOptions.None)
    {


Task<string> task = PeriodicTaskFactory.Start(LongRunningOperation, intervalInMilliseconds: 1000, synchronous: false, cancelToken: cancellationTokenSource.Token);

string result = task.Result;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM