我正在创建一个ASP.NET WebAPI 2控制器.它有效,但我很困惑.看来我正在返回List <..>而不是Task
请向我解释为什么返回列表是正确的.
public class AttendeePriceController : ApiController
{
// GET api/<controller>
public async Task<List<AttendeePrice>> Get()
{
List<AttendeePrice> attendeesPriceList;
using (var db = new MyContext())
{
attendeesPriceList = await db.AttendeePrices.ToListAsync();
}
return attendeesPriceList;
}
Run Code Online (Sandbox Code Playgroud) 我想订阅一个事件的异步方法。
然而,编译器不会让我这样做。
我怎样才能做到这一点?
例子:
class SearchBase
{
public delegate void ReuestingCollectionHandler();
public event ReuestingCollectionHandler RequestingCollection = null;
}
.
.
.
SearchBase.RequestingCollection += LoadCandidates;
public async Task LoadCandidates()
{
var queryText = string.Empty;
Candidates = await CandidatesManager.GetCandidates(Profile.Instance.RecruiterId);
}
Run Code Online (Sandbox Code Playgroud) 我是线程和并行库的新手。我试图了解MaxDegreeOfParallelism以及应将其设置为什么值。
做一些阅读,对我来说可能有点误导。
如果我想在4个线程上运行,我想我可以做
var parOptions=new ParallelOptions();
parOptions.MaxDegreeOfParallelism=4;
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,多读一些内容似乎并不意味着可以在4个线程上运行,而是更多地涉及Cores及其使用量。
为简单起见,设置应运行的线程数的正确方法是什么?或者,也许您可以在它可以使用的多个线程上进行设置,但是可以在其使用的核心数量上进行更多设置
我打算在config.eg“ ThreadCount”中设置一个用户可以指定的值。这是其他开发人员将运行的内部应用程序,用于导入内容。
任何澄清吗?谢谢
我想创建一些Web服务,但我决定使用WebAPI作为服务框架而不是WCF,所以我有一些问题:
我可以使用全功能的的WebAPI的ASP.NET Web窗体 4.5 没有任何问题?
WebForms 4.5与异步等待编程一起使用?
WebForms 4.5可以与HttpClient库和异步编程一起使用, 没有任何问题或限制吗?
有没有什么特别的限制,用的WebAPI的ASP.NET的WebForms 4.5?(反之亦然)
*如果有限制,我将被迫使用WCF :(
我的程序出现死锁,但我不知道为什么以及如何解决它。
精简版:
一个asynctosync方法锁定等待异步调用,它调用另一个,依此类推,直到HttpClient.PostAsync调用。http post 调用永远不会发生,至少它没有到达服务器(我也拥有)。客户端没有错误。我的主要问题是在这个 SO 问题的末尾。谢谢!
更长的版本:
我知道很容易出现死锁,我们必须小心。我试图坚持 1. 将异步传播到所有方法和 2.ConfigureAwait(false)尽可能使用/有意义的建议。(我认为这一点的主要倡导者是 Stephen Cleary 作为他的博客和我阅读过的许多 SO 中的答案)。
好吧,我的程序……不幸的是,我不能在这里发布完整的示例代码,它很长;我把它描述为一个同步方法A,它调用一个异步方法B,它调用另一个异步,它调用另一个异步,等等。最终最后一个异步调用是HttpClient.PostAsync.
程序停止在await HttpClient.PostAsync。此外,Http post 永远不会触发(我拥有目标服务器,在这种情况下它永远不会收到请求)。(我仔细检查了 uri 等)。
因此,同步方法会锁定等待B的异步任务完成,而这从未发生过。A看起来像这样:
public Byte[] A()
{
var task = BAsync();
return task.GetAwaiter().GetResult();
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式使用同步,因为他的方法不需要返回上下文,我看到斯蒂芬在 Nito 中建议的方法是使用它实现的。(我也尝试过task.Result,但结果相同)。
http post调用的代码是:
private static async Task<HttpResponseMessage> PostAsync(Uri serverUri, HttpContent httpContent)
{
var client = new HttpClient();
return await client.PostAsync(serverUri, …Run Code Online (Sandbox Code Playgroud) 我有一个来自我正在尝试查询的Web服务的XML文档.但是,我不确定如何在嵌套在其他元素中的元素时查询XML.
这是XML文件的一部分(我没有包含所有内容,因为它是一个长文件):
<response>
<display_location>
<full>London, United Kingdom</full>
<city>London</city>
<state/>
<state_name>United Kingdom</state_name>
<country>UK</country>
<country_iso3166>GB</country_iso3166>
<zip>00000</zip>
<magic>553</magic>
<wmo>03772</wmo>
<latitude>51.47999954</latitude>
<longitude>-0.44999999</longitude>
<elevation>24.00000000</elevation>
</display_location>
<observation_location>
<full>London,</full>
<city>London</city>
<state/>
<country>UK</country>
<country_iso3166>GB</country_iso3166>
<latitude>51.47750092</latitude>
<longitude>-0.46138901</longitude>
<elevation>79 ft</elevation>
</observation_location>
Run Code Online (Sandbox Code Playgroud)
我可以一次查询"一个部分"但我正在从LINQ构造一个对象.例如:
var data = from i in weatherResponse.Descendants("display_location")
select new Forecast
{
DisplayFullName = i.Element("full").Value
};
var data = from i in weatherResponse.Descendants("observation_location")
select new Forecast
{
ObservationFullName = i.Element("full").Value
};
Run Code Online (Sandbox Code Playgroud)
我的"预测"类基本上只是充满了这样的属性:
class Forecast
{
public string DisplayFullName { get; set; };
public string ObservationFullName { get; set; }; …Run Code Online (Sandbox Code Playgroud) 我正在学习 C#,并且为链表创建了一个递归插入方法:
public static int recursiveInsert(ref int value, ref MyLinkedList list) {
if (list == null)
return new MyLinkedList(value, null);
else {
list.next = recursiveInsert(ref int value, ref list.next);
return list;
}
}
Run Code Online (Sandbox Code Playgroud)
如何修改此方法以使递归调用如下所示:
recursiveInsert(value, ref list.next)
Run Code Online (Sandbox Code Playgroud)
代替:
list.next = recursiveInsert(ref int value, ref list.next);
Run Code Online (Sandbox Code Playgroud) 对象ListOfComment的List<Comment>属性在哪里,最好的方法是:
ListOfComment = new List<Comment>
{
foreach(object a in b)
{
new Comment
{
Type = "",
Description = ""
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个facebook post id列表 386050065267_10153256675935268
通过使用下面的代码我获得所需的结果作为喜欢,分享和评论的总数
foreach (var item in collection)
{
FacebookClient fb = new FacebookClient(accessToken);
dynamic result = fb.Get(item.postId, new { fields = "shares,likes.summary(true),comments.summary(true)" });
}
Run Code Online (Sandbox Code Playgroud)
在该代码中是否有使用异步的可能性?我是异步功能的新手,请帮我做正确的代码,感谢所有的想法.
我有一个Web API控制器.它调用一个返回IAsyncResult的方法.当我调用控制器时,我收到错误
在异步操作仍处于挂起状态时完成异步模块或处理程序.
如何让控制器等待asyncresult?
我打算使用await,但我可能还没有弄清楚这个用例的语法.
我还没有找到关于SO的现有答案.
我正在使用c#4.5
[HttpGet]
[Route("GetGridDataAsync")]
public string GetGridDataAsync()
{
var proxy = new Proxy();
return proxy.BeginGetDataAsync("test", ar => proxy.EndGetDataAsync(ar));
}
public IAsyncResult BeginGetDataAsync(string r, AsyncCallback callback){}
public DataResponse[] EndGetDataAsync(IAsyncResult asyncResult){}
Run Code Online (Sandbox Code Playgroud) c# ×10
async-await ×6
.net ×2
asp.net ×2
asynchronous ×1
c#-5.0 ×1
events ×1
facebook ×1
linq ×1
linq-to-xml ×1
webforms ×1
xml ×1