C# 为任务创建lambda表达式<;字符串>;

C# 为任务创建lambda表达式<;字符串>;,c#,string,asynchronous,task,C#,String,Asynchronous,Task,如何为返回字符串的任务创建lambda表达式 这是我尝试过的,但我犯了一个错误 谢谢你的帮助 public static async Task<string> GetStringAsync(string path) { try { var task = new Task<string>(async () => { var response = aw

如何为返回字符串的任务创建lambda表达式

这是我尝试过的,但我犯了一个错误

谢谢你的帮助

public static async Task<string> GetStringAsync(string path)
    {
        try
        {
            var task = new Task<string>(async () =>
            {
                var response = await Client.GetAsync(path);

                var responsestring = await response.Content.ReadAsStringAsync();

                return responsestring;
            });

            return await Task.WhenAny(task, Task.Delay(20000)) == task
                ? task.Result
                : RequestTimeOutMessage;
        }
        catch (Exception e)
        {
            return e.GetBaseException().Message;
        }
    }
}
公共静态异步任务GetStringAsync(字符串路径)
{
尝试
{
var task=新任务(异步()=>
{
var response=await Client.GetAsync(路径);
var responsestring=await response.Content.ReadAsStringAsync();
回报率;
});
返回等待任务。WhenAny(任务,任务。延迟(20000))==任务
?任务、结果
:RequestTimeOutMessage;
}
捕获(例外e)
{
返回e.GetBaseException()消息;
}
}
}
。实际上,没有充分的理由使用它

您的问题可以自然地表示为单独的方法:

public static async Task<string> GetStringAsync(string path)
{
  try
  {
    var task = DoGetStringAsync(path);

    return await Task.WhenAny(task, Task.Delay(20000)) == task
        ? await task
        : RequestTimeOutMessage;
  }
  catch (Exception e)
  {
    return e.GetBaseException().Message;
  }
}

private async Task<string> DoGetStringAsync(string path)
{
  var response = await Client.GetAsync(path);
  var responsestring = await response.Content.ReadAsStringAsync();
  return responsestring;
}
另一方面,我建议对超时和通信错误使用异常,而不是特殊字符串。

。实际上,没有充分的理由使用它

您的问题可以自然地表示为单独的方法:

public static async Task<string> GetStringAsync(string path)
{
  try
  {
    var task = DoGetStringAsync(path);

    return await Task.WhenAny(task, Task.Delay(20000)) == task
        ? await task
        : RequestTimeOutMessage;
  }
  catch (Exception e)
  {
    return e.GetBaseException().Message;
  }
}

private async Task<string> DoGetStringAsync(string path)
{
  var response = await Client.GetAsync(path);
  var responsestring = await response.Content.ReadAsStringAsync();
  return responsestring;
}
另一方面,我建议对超时和通信错误使用异常,而不是特殊字符串。

这是我所知道的“最简单”的方式:

//Without result
var task = ((Func<Task>)(async () =>{
    await Task.Delay(100);    
}))();

//With result
var task2 = ((Func<Task<string>>)(async () =>{
    await Task.Delay(100);
    return "your-string";
}))();
//没有结果
变量任务=((Func)(异步()=>{
等待任务。延迟(100);
}))();
//结果
var task2=((Func)(异步()=>{
等待任务。延迟(100);
返回“你的字符串”;
}))();
这是我所知道的“最简单”的方式:

//Without result
var task = ((Func<Task>)(async () =>{
    await Task.Delay(100);    
}))();

//With result
var task2 = ((Func<Task<string>>)(async () =>{
    await Task.Delay(100);
    return "your-string";
}))();
//没有结果
变量任务=((Func)(异步()=>{
等待任务。延迟(100);
}))();
//结果
var task2=((Func)(异步()=>{
等待任务。延迟(100);
返回“你的字符串”;
}))();

尝试将任务初始化替换为以下内容,即var task=task.Run(()=>{var response=wait Client.GetAsync(路径);var responsestring=wait response.Content.ReadAsStringAsync();return responsestring;});尝试用以下内容替换任务初始化,即var task=task.Run(()=>{var response=await Client.GetAsync(path);var responsestring=await response.Content.ReadAsStringAsync();return responsestring;});