我最近一直在研究内存管理,并一直在研究如何管理事件,现在,我看到了事件订阅的显式添加/删除语法.
我认为这很简单,添加/删除只允许我在订阅和取消订阅时执行其他逻辑?我得到它了,还是有更多的东西?
此外,虽然我在这里,任何清理我的事件处理的建议/最佳实践.
我已经看了几个月的公共交通,我对这些可能性非常感兴趣.但是,我似乎无法将这些概念完全正确.我看了代码,我已经阅读了文档,但我觉得我并不理解它.
一般的例子显示;
Bus.Initialize( sbc =>
{
sbc.UseMsmq( );
sbc.VerifyMsmqConfiguration( );
sbc.UseMulticastSubscriptionClient( );
sbc.ReceiveFrom( "msmq://localhost/myqueue" );
} );
Run Code Online (Sandbox Code Playgroud)
现在,我明白这是做什么的,但我不认为我的大脑比这更进一步.这就是我所理解的;
我只想更多地了解这一点.我不认为我得到它.我是否需要配置服务器,监听?我是否在我的软件中设置它然后只是发布消息,它们从内部被拾取和处理?
所以我试图将用户的概念引入我的应用程序,并拥有自己的一组自定义登录例程等工作正常.在我的模块中,我将IUserSession绑定到我的实现和InSingletonScope.
现在我怀疑是这种情况,并且已经能够证明这不是正确的事情,如果我尝试使用两个用户登录同一站点,我只获得一组数据.
如果我实现MembershipProvider,我是否应该避免这种限制.我知道,如果我实施会员提供者,我不必注入所有内容,但我的登录不仅仅是用户名/密码,如何使用其他数据登录"?
我正在与Xamarin一起开发一个Android项目,并且在此过程中,我决定编写自己的简单IoC容器.现在,我来决定是否需要为注入的实例注入任何依赖项.我查看了Type.GetConstructors,它说它可以在PCL项目中使用,但我似乎无法获得GetConstructors.
我在使用中有System.Reflection,如果我创建了一个Android库,我可以使用GetConstructor/s.MSDN 文档肯定说它在PCL中.也许这不是我完全理解PCL在Xamarin生态系统中意味着什么,但我认为这意味着它会受到支持.
所以,我的问题是,我错过了什么或者这是否正确?
UPDATE
对于任何想看我怎么做的人;
我试图了解有关使用HttpWebRequest进行异常处理的知识。
我有一个客户端库,它正在向WebAPI控制器发出请求;
HttpWebRequest r = (HttpWebRequest)WebRequest.Create(url);
r.Method = "POST";
r.ContentType = "application/json";
foreach (var header in request.Headers)
{
r.Headers.Add(header.Key, header.Value.ToString());
}
r.ContentLength = request.RequestBody.Length;
using (StreamWriter writer = new StreamWriter(r.GetRequestStream()))
writer.Write(request.RequestBody);
Run Code Online (Sandbox Code Playgroud)
我知道请求将引发异常,并包含消息“实体已存在-1234”。
当我得到回应时;
using (HttpWebResponse response = (HttpWebResponse)r.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
return reader.ReadToEnd();
return "Invalid";
}
Run Code Online (Sandbox Code Playgroud)
我抛出了WebException。因此,请求的调用者中有一个try..catch。我得到了WebException。我得到的是协议错误,而不是引发的500内部服务器错误(稍后使用正确的状态代码表示消息)。现在,如果我阅读了WebException的Response,它确实包含了我的消息和stacktrace。
问题
我四处搜寻,发现有些人在使用不正确的标题等时遇到了这个问题。但是据我所知,我已经添加了所有可以并且仍然具有相同行为的标题。
我开始使用MySQL开发应用程序,虽然我在使用数据库之前已经开发了应用程序,但我通常会使用递增id方法.有一天,我正在某个地方阅读帖子,看到有人因为没有正确地"正常化数据库"而被分开.我不是一个大数据库人,但我想确保我做对了.
任何想法,帮助/指导?
尝试创建一个服务来消费来自 Kafka 的许多主题。我想为每个消费者创建一个任务,这意味着这些是长时间运行的任务。
在每项任务中,如果我这样做;
while(!token.IsCancellationRequested)
{
var result = await consumer.Consume(token);
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试启动多个任务,第一个任务会启动,但其他任务不会继续。
我以为我正在寻找关于如何正确管理任务的最佳实践(这不是我做过的很多事情)并发布在软件工程上,但有人告诉我有一个错误,我应该在这里发布。
看这部作品;
async Task Main()
{
var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5));
await Task.WhenAll(Consumer1(cancellationTokenSource.Token), Consumer2(cancellationTokenSource.Token));
Console.WriteLine("Complete");
}
private async Task Consumer1(CancellationToken token)
{
Console.WriteLine("Working on consumer 1");
while (!token.IsCancellationRequested)
{
// Do a thing
// await consumer.Consume()
}
Console.WriteLine("Completed Consumer 1");
await Task.CompletedTask;
}
private async Task Consumer2(CancellationToken token)
{
Console.WriteLine("Completed consumer 2");
await Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)
结果将是;
00:00:00: Working on consumer 1
00:00:05: Completed Consumer 1
00:00:05: Completed …
Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×1
events ×1
httprequest ×1
masstransit ×1
mono ×1
mysql ×1
ninject ×1
ninject.web ×1
primary-key ×1
reflection ×1
servicebus ×1
xamarin ×1