C# 调用异步方法时,对象引用未设置为对象的实例
Twitter不通过其RESTAPI提供用户生日。因此,我准备了一个可为空的DateTime属性 我还为所有社交网络服务准备了一个接口。其中大多数是异步任务方法 但我无法传递这个错误:对象引用未设置为对象的实例,即使我没有使用该对象 对于Twitter服务,接口方法GetUserBirthDayAsync的实现如下:C# 调用异步方法时,对象引用未设置为对象的实例,c#,C#,Twitter不通过其RESTAPI提供用户生日。因此,我准备了一个可为空的DateTime属性 我还为所有社交网络服务准备了一个接口。其中大多数是异步任务方法 但我无法传递这个错误:对象引用未设置为对象的实例,即使我没有使用该对象 对于Twitter服务,接口方法GetUserBirthDayAsync的实现如下: public Task<DateTime?> GetUserBirthDayAsync(){ return null; // because twitter d
public Task<DateTime?> GetUserBirthDayAsync(){
return null; // because twitter does not provide user birthday
}
将值设置为BirthDate变量时出错
发生了什么事?导致异常的原因是什么?请尝试以下操作:
public Task<DateTime?> GetUserBirthDayAsync()
{
return Task.Run(() => (DateTime?)null);
}
公共任务GetUserBirthDayAsync()
{
返回任务。运行(()=>(日期时间?)null);
}
或者,做同样事情的更好方法:
public Task<DateTime?> GetUserBirthDayAsync()
{
return Task.FromResult<DateTime?>(null);
}
公共任务GetUserBirthDayAsync()
{
返回Task.FromResult(空);
}
当您只返回
null
时,这意味着您的任务是null
,而不是异步方法的结果。您调用了await on null。我想你心里有这样的想法:
public Task<DateTime?> GetUserBirthDayAsync(){
return Task.Run(() => (DateTime?)null); // because twitter does not provide user birthday like faceBK
}
公共任务GetUserBirthDayAsync(){
return Task.Run(()=>(DateTime?)null);//因为twitter不像faceBK那样提供用户生日
}
即使我没有使用对象
是的,您正在使用该对象。null
对象是从GetUserBirthDayAsync()
返回的任务。当您尝试等待此任务时,您可以使用它
因此,NullReferenceException
由wait
(或编译器为其创建的代码)引发
因此,您可能要做的是返回一个任务
,该任务返回一个null
作为结果类型:
public Task<DateTime?> GetUserBirthDayAsync(){
return Task.Run(() => (DateTime?)null);
}
公共任务GetUserBirthDayAsync(){
返回任务。运行(()=>(日期时间?)null);
}
另一种方法是只使用任务。FromResult(null)
作为
公共任务GetUserBirthDayAsync()
{
返回Task.FromResult(空);
}
创建已使用成功完成的任务
指定的结果
与其他选项基本相同,但我觉得它看起来更干净。Vogt你说得对,我就是这么想的。谢谢,它现在可以工作了。
任务。FromResult(null)
将是一个更好的方式来陈述同样的事情。@spender添加了您的示例。请随意编辑答案,如果您认为可以改进!我使用wait是因为我使用的是依赖注入,我不知道我使用的是TwitterService还是FacebookService,它实际上返回的是生日。
public Task<DateTime?> GetUserBirthDayAsync(){
return Task.Run(() => (DateTime?)null);
}
public Task<DateTime?> GetUserBirthDayAsync()
{
return Task.FromResult<DateTime?>(null);
}