带有自定义任务的C#任务重写函数

带有自定义任务的C#任务重写函数,c#,async-await,task,C#,Async Await,Task,我有一个函数声明如下: public Task<PossibleUser> FindByNameAsync(string userName) { Task<PossibleUser> task = context.TabelaStudenti.Where( apu => apu.NrMatricol == userName) .FirstOrDefaultAsync(); return task; } Possib

我有一个函数声明如下:

public Task<PossibleUser> FindByNameAsync(string userName)
{
    Task<PossibleUser> task = context.TabelaStudenti.Where(
        apu => apu.NrMatricol == userName)
        .FirstOrDefaultAsync();

    return task;
}
PossibleUser user = await userManager.FindAsync(context.UserName, context.Password); 
public Task<PossibleUser> FindByNameAsync(string userName)
{
    return context.TabelaStudenti
        .FirstOrDefaultAsync(st => st.NrMatricol == userName)
        .ContinueWith(task =>
        {
            var studentUser = task.Result;
            if (studentUser != null)
            {
                return new PossibleUser
                {
                    Password = studentUser.Parola,
                    UserName = studentUser.UserName
                };
            }
            //just return something else
            return new PossibleUser();
        });
}
它是ASP.NET Web API Owin身份验证的一部分,其中UserManager是

    UserManagerFactory = () => new UserManager<PossibleUser>(new StudentStore()) { PasswordHasher = new MyPasswordHasher() };
UserManagerFactory=()=>newusermanager(newstudentstore()){PasswordHasher=newmypasswordhasher()};

您只是忘记启动新创建的任务:

public Task<PossibleUser> FindByNameAsync(string userName)
{
    Student studentUser = context.TabelaStudenti.Where(st => st.NrMatricol == userName).FirstOrDefault();
    Task<PossibleUser> someTask= new Task<PossibleUser>(() =>
    {
        if (studentUser == null)
        {
            return new PossibleUser()
            {
                Password = studentUser.Parola,
                UserName = studentUser.UserName
            };
        }
        else
        {
            //just return something else
            return new PossibleUser();
        }
    });

    // start your task
    someTask.Start();
    return someTask;
}
您可以使用以下内容:

public Task<PossibleUser> FindByNameAsync(string userName)
{
    Task<PossibleUser> task = context.TabelaStudenti.Where(
        apu => apu.NrMatricol == userName)
        .FirstOrDefaultAsync();

    return task;
}
PossibleUser user = await userManager.FindAsync(context.UserName, context.Password); 
public Task<PossibleUser> FindByNameAsync(string userName)
{
    return context.TabelaStudenti
        .FirstOrDefaultAsync(st => st.NrMatricol == userName)
        .ContinueWith(task =>
        {
            var studentUser = task.Result;
            if (studentUser != null)
            {
                return new PossibleUser
                {
                    Password = studentUser.Parola,
                    UserName = studentUser.UserName
                };
            }
            //just return something else
            return new PossibleUser();
        });
}
公共任务FindByNameAsync(字符串用户名) { return context.TabelaStudenti .FirstOrDefaultAsync(st=>st.NrMatricol==用户名) .ContinueWith(任务=> { var studentUser=task.Result; if(studentUser!=null) { 返回新的可能用户 { Password=studentUser.Parola, UserName=studentUser.UserName }; } //还点别的吧 返回新的PossibleUser(); }); }
永远不要使用任务构造函数。只需使用
async
/
wait

public async Task<PossibleUser> FindByNameAsync(string userName)
{
  Student studentUser = await context.TabelaStudenti.FirstOrDefaultAsync(st => st.NrMatricol == userName);
  if (studentUser != null)
  {
    return new PossibleUser()
    {
      Password = studentUser.Parola,
      UserName = studentUser.UserName
    };
  }
  else
  {
    //just return something else
    return new PossibleUser();
  }
}
公共异步任务FindByNameAsync(字符串用户名)
{
Student studentUser=wait context.TabelaStudenti.FirstOrDefaultAsync(st=>st.NrMatricol==userName);
if(studentUser!=null)
{
返回新的PossibleUser()
{
Password=studentUser.Parola,
UserName=studentUser.UserName
};
}
其他的
{
//还点别的吧
返回新的PossibleUser();
}
}