C# 对类型为';任务<;列表<;SharepointDTO.RootObject>&燃气轮机;
我试图在C#应用程序中多次调用Sharepoint API,并将返回的结果存储到C# 对类型为';任务<;列表<;SharepointDTO.RootObject>&燃气轮机;,c#,api,C#,Api,我试图在C#应用程序中多次调用Sharepoint API,并将返回的结果存储到列表中,如下所示 private async Task<List<sDTO.RootObject>> getfromSharepoint() { List<SharepointDTO.RootObject> returnObj = new List<SharepointDTO.RootObject>(); var result =
列表中,如下所示
private async Task<List<sDTO.RootObject>> getfromSharepoint()
{
List<SharepointDTO.RootObject> returnObj = new List<SharepointDTO.RootObject>();
var result = new UpdateCoreStrains.SharepointDTO.RootObject();
......
// Calling GET Sharepoint Site
try
{
for (int i = 0; i < 10000; i = i + 5000)
{
SP_StrainCodes = "GetByTitle('S%20Codes')/items?$skiptoken=Paged=TRUE%26p_ID=" + i + "&$top=1";
core_URL = BaseURL_SP + SP_StrainCodes;
var response = client_sharePoint.GetAsync(core_URL).Result;
var responsedata = await response.Content.ReadAsStringAsync();
result = JsonConvert.DeserializeObject<sDTO.RootObject>(responsedata);
if (result.d.Next == null)
continue;
}
returnObj.Add(result);
}
return returnObj;
}
私有异步任务getfromSharepoint()
{
List returnObj=新列表();
var result=new updateconstraints.SharepointDTO.RootObject();
......
//调用获取Sharepoint站点
尝试
{
对于(int i=0;i<10000;i=i+5000)
{
SP_straintCodes=“GetByTitle('S%20Codes')/items?$skiptoken=Paged=TRUE%26p_ID=“+i+”&$top=1”;
core_URL=BaseURL_SP+SP_代码;
var response=client\u sharePoint.GetAsync(core\u URL).Result;
var responsedata=await response.Content.ReadAsStringAsync();
结果=JsonConvert.DeserializeObject(responsedata);
if(result.d.Next==null)
继续;
}
返回对象添加(结果);
}
返回OBJ;
}
现在我在另一个函数中调用getfromSharepoint(),我想迭代列表以验证数据
public List<numberList> getListFromSharepoint()
{
List<umberList> nums = new List<numberList>();
try
{
Task<List<sDTO.RootObject>> sharepointList = getfromSharepoint();
foreach(sDTO retSharepointobj in sharepointList)
{
if (retSharepointobj == null ||
retSharepointobj.Id == 0 ||
retSharepointobj.Result.
retSharepointobj.Result == null ||
retSharepointobj.Result.d == null ||
retSharepointobj.Result.d.results == null ||
retSharepointobj.Result.d.results.Count == 0
)
{
return nums; // count = 0, return an empty list
}
公共列表getListFromSharepoint()
{
List nums=新列表();
尝试
{
任务sharepointList=getfromSharepoint();
foreach(sDTO retSharepointobj在sharepointList中)
{
if(retSharepointobj==null||
retSharepointobj.Id==0||
retSharepointobj.Result。
retSharepointobj.Result==null||
retSharepointobj.Result.d==null||
retSharepointobj.Result.d.results==null||
retSharepointobj.Result.d.results.Count==0
)
{
return nums;//count=0,返回空列表
}
但是我得到了一个错误,就像
foreach语句无法对“Task”类型的变量进行操作,因为“Task”不包含“GetEnumerator”的公共定义。
我如何迭代>Ths:任务共享点列表=getfromSharepoint();
正在调用一个async
方法,该方法不会立即返回。您的代码应该如下所示:
List<sDTO.RootObject> sharepointList = getfromSharepoint().Result;
List sharepointList=getfromSharepoint().Result;
这里您试图迭代sharepointList
的项目,该项目属于Task
类型,不包含“GetEnumerator”的公共定义(如错误消息所述)。但您可以迭代任务的结果,因为它是RootObject
的集合。如果您希望通过sharepointList
的List
进行循环,则应使用:
foreach (sDTO.RootObject retSharepointobj in sharepointList.Result)
{
// here each retSharepointobj of type RootObject
// code here
}
尝试将您的
getListFromSharepoint
方法设置为async
public async Task<List<numberList>> getListFromSharepoint()
{
List<umberList> nums = new List<numberList>();
try
{
//Here we use an await to get result from getfromSharepoint() method call.
List<sDTO.RootObject> sharepointList = await getfromSharepoint();
foreach (sDTO retSharepointobj in sharepointList)
{
//your rest of code is same here
}
或
您只需使用getfromSharepoint
的Result
List<sDTO.RootObject> sharepointList = await getfromSharepoint().Result;
List sharepointList=Wait getfromSharepoint()。结果;
您有异步代码,您应该正确地等待它。@DavidG-Yeah正在做var-responsedata=wait-response.Content.ReadAsStringAsync();
试试这个任务共享点列表=wait-getfromSharepoint();
并将getListFromSharepoint
方法设置为async
如何从其他函数调用此方法getListFromSharepoint()
;List sharepointList=getfromSharepoint().Result;这不应该是一个选项,因为它会破坏异步函数的正常流程。@Eldho:实际上,我不能使用await
,因为调用方法本身不是async
。在任务上调用.Results
是一种容易陷入死锁的方法,应该避免,使用await
。看一看此处:更改后的sharepointList
不应为Task
类型,它现在将是一个普通的列表
。此外,这里根本没有理由使用try/catch。try/catch和throw ex仅用于完成小括号。感谢您的建议,我将更新我的answer@ershoaib我得到的错误类似于无法隐式y将类型“System.Collections.Generic.List”转换为“System.Threading.Tasks.Task”
如果我使用的是Task returnSharepointList=Wait getfromSharepoint()
调用fromgetListFromSharepoint
的函数时出现此错误的原因?如果仅使用Task sharepointList=getfromSharepoint(),您会得到什么.Result;
?
List<sDTO.RootObject> sharepointList = await getfromSharepoint().Result;