Scheduling Background Tasks In .NET With Quartz

  Рет қаралды 42,622

Milan Jovanović

Milan Jovanović

Күн бұрын

Пікірлер
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Get the source code for this video for FREE → the-dotnet-weekly.ck.page/quartz Want to master Clean Architecture? Go here: bit.ly/3PupkOJ Want to unlock Modular Monoliths? Go here: bit.ly/3SXlzSt
@kazepis
@kazepis Жыл бұрын
I was really hoping to see how you move the configuration to an external xml or json file. Maybe something for a “short” video? 😊
@AS-zj4jv
@AS-zj4jv Жыл бұрын
Dang Milan bro, you've got an answer for every .NET question I can possibly ask. Please don't ever stop making these videos.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Really glad to hear that! 😁 And I'm glad this video was valuable
@ManuelRaso-v4k
@ManuelRaso-v4k Жыл бұрын
No matter how varied what I am looking for may be, there always be a Milan's video which explain it in the best way
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Hundreds of topics left to cover, but I'm glad some questions are being answered 😁
@ASIMKHAN-ig9eo
@ASIMKHAN-ig9eo 11 ай бұрын
Exactly, and when i am in need to implement something in my project, milan video just pop up at my notifications
@cedricv-p9z
@cedricv-p9z Жыл бұрын
I really liked this video, but I had hoped to see an example of a request that starts a long running background process It would go something like this: 1. http request is received 2. long running task is initiated based on given request parameters 3. if initiated correctly, http response is sent 4. request sender will get long running task update by webhook All of this is probably too long for a single video, so maybe you can split it up between points 1,2,3 and 4 Hope you like this idea!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
That's a very nice idea for a future video!
@cryptoeric24
@cryptoeric24 Жыл бұрын
Totally serious!!! You need to do a clean architecture bootcamp and spread the news, Mr. Clean Architecture Evangelist!!!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
My Clean Architecture course is coming out in the next 7-10 days, if all goes well. So that should be a nice start 😁😁
@techie607
@techie607 Жыл бұрын
Waiting
@stephanengaleu576
@stephanengaleu576 Жыл бұрын
​@@MilanJovanovicTechso we are waiting for KZbin notification 😊
@destinyhans8519
@destinyhans8519 Жыл бұрын
Can’t wait for the course 🎉
@CodeAlongWithMe
@CodeAlongWithMe Жыл бұрын
Excellent explanation, we need more videos like this one for understanding background tasks. Keep up the great work!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Glad it was helpful!
@thescarletcars
@thescarletcars 11 ай бұрын
Thanks so much! this was very helpful!! Just about to write my first background job application with quartz
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
Glad it was helpful!
@canyoldas2855
@canyoldas2855 10 ай бұрын
You've made me a .NET beast. Thank you.
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Hah, that's awesome! Glad to hear :)
@MustakimTriveni
@MustakimTriveni Жыл бұрын
Thanks brother for sharing scheduler knowledge. it help me a lot.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
My pleasure
@kodindoyannick5328
@kodindoyannick5328 10 ай бұрын
Exciting content! Many thanks to you
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Glad you enjoy it!
@ayalamac
@ayalamac Жыл бұрын
I imagine an API that post the construction of new routine in quartz with the given params about how often it will work and the destination or subjects involved. Every time the post method in the controller is called, another instance is launched doing a different thing. This will be for configuring multiple data refreshing jobs for several powerbi dashboards, using their rest api
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
I see... You can configure a job instance, and trigger the schedule manually. Also take a look at Hangfire, because I think it's more suited for what you're looking for.
@ahmedifhaam7266
@ahmedifhaam7266 Жыл бұрын
​@@MilanJovanovicTechHi, why is hangfire more suitable for that?
@E_G_
@E_G_ Жыл бұрын
Thank you for the video, love your blog also
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Thanks a million!
@nove1398
@nove1398 Жыл бұрын
Nice share! I was looking into a solution for a problem lately and this was one of my options. I prefer a simple interface surface to work with.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Glad it helped!
@10Totti
@10Totti Жыл бұрын
Great video!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Thanks!
@Saiko1441
@Saiko1441 Жыл бұрын
Thanks for this video!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
You're welcome! :)
@herveVeve
@herveVeve Жыл бұрын
Thank you for the video, it was interesting and informative.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Glad it was helpful!
@techie607
@techie607 Жыл бұрын
I use to create custom windows service, after some time I moved to "Hangfire" I will try this by creating sample project soon
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Hangfire is very good also
@kaymau5268
@kaymau5268 Жыл бұрын
Thank you for this helpful video. Glad I found it. I'm a new subscriber!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Glad you enjoyed this video 😁
@victors16811
@victors16811 Жыл бұрын
nice contribution! thank you!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Glad you liked it!
@anuragmodi02
@anuragmodi02 Жыл бұрын
what's the difference between using Quartz vs setting up a simple worker service and scheduling with a scheduler something like `Dollar Universe` or `Active Batch Job`? Apart from the fact that using quartz we won't need scheduling tools.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
I'm not familiar with either of the schedulers you mentioned, so can't give you a proper answer
@ManiasInc
@ManiasInc Жыл бұрын
Great!! men!! thanks a lot!!👏🏽👏🏽👏🏽👏🏽🎉🎉🎉🎉
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
No problem
@majormartintibor
@majormartintibor Жыл бұрын
Nice one!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Thanks a lot :)
@luisfortuna4471
@luisfortuna4471 Жыл бұрын
So nice approch. Thanks.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Glad you liked it!
@krzysztofg5840
@krzysztofg5840 3 ай бұрын
Another great video, glory to Slavic programmers 😁
@MilanJovanovicTech
@MilanJovanovicTech 3 ай бұрын
💪
@kareemolayinka9776
@kareemolayinka9776 Жыл бұрын
Which is better Quartz or HangFire ?
@cliffwakefield
@cliffwakefield Жыл бұрын
After watching this video I am glad we are using Hangfire Pro for our purposes.
@yardeZ93
@yardeZ93 Жыл бұрын
@@cliffwakefield Can you elaborate about the reason?
@cliffwakefield
@cliffwakefield Жыл бұрын
@@yardeZ93 Hangfire is built upon the concept of persistence layer (we use Redis) so the scheduling of jobs and the executing of jobs can be in completely different processes. Their only point of contact is the job details stored in the persistence layer. It also comes with a Web Console so you can monitor the state of jobs as they are processed, which is especially important when you are running scheduled and recurring jobs. The Web Console can also run in a different process. It also has the concept of batches and continuations which we have found very useful. For example, a parent job that fires up once a day and locates all services without outstanding amounts due, then launches a batch of children jobs that take a payment and generate an invoice. And once the batch is finished it is followed up by a continuation job that sends out a summary via email of the payments taken that day.
@cliffwakefield
@cliffwakefield Жыл бұрын
You can also scale out horizontally and vertically with Hangfire. We have a number of worker processes per EC2 Instance (vertical) and then a number of EC2 Instances (horizontal) to increase the level of parallelism we can get with our batches. The Elasticache (Redis) persistence layer can handle these levels of concurrency with ease.
@cliffwakefield
@cliffwakefield Жыл бұрын
But to get the more advanced features and official Redis support you need to pay for a license.
@theprantadutta
@theprantadutta Жыл бұрын
do they provide any dashboard like hangfire, and how is this better than hangfire?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
No (I'll make a separate video for Hangfire to compare them)
@theprantadutta
@theprantadutta Жыл бұрын
@@MilanJovanovicTech ok, thanks
@marcociaschini4616
@marcociaschini4616 Жыл бұрын
I'm wondering what do you think about background jobs from a DDD perspective in a microservices environment. Usually you have some service that deals with some business features of a specific bounded context. And this service usually manages its own database (or at least its own tables). However, it's a common scenario that inside a bounded context there's some need of background jobs that run aside the main microservice. So I'm struggling with this concept: can these background jobs access the same database/tables of the main microservice, cause they are working virtually in the same bounded context? Or they should call some API exposed by the main microservice, so it is the only one that access the persistence layers with aggregates and entities?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Since they are highly coupled anyway, using the same database wouldn't make things much worse.
@jameeliqbal9107
@jameeliqbal9107 Жыл бұрын
thank you for the video on Quartz. Short and precise info provided. I want access the same quartz db from 2 apps: 1 desktop app (to manage jobs and triggers) and 1 windows service to run the jobs. Is it possible to do this using Quartz?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
It should be doable. Did you try it?
@attilaguba856
@attilaguba856 11 ай бұрын
Nice one! Can you make a video how to make an email email reminder/ like your reservation will start before 48 hours / using Quartz and SendGrid! I would really appreciate it 😊
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
Might be an interesting video to make
@attilaguba856
@attilaguba856 11 ай бұрын
@@MilanJovanovicTech that would be amazing or you can make a guideline how should to do! / for testing might you can reduce a time for 1 minute or make it dynamic like between 1 hour to 60 hours not fixed value ?!
@Red-qz4lx
@Red-qz4lx 7 ай бұрын
I would have made the backgroud job class inherit from the IConfiguration interface directly, so you will have both the job action and it's schedule in the same class, and that it's pretty neat for small operations (In case multiple job have the same schedule i would make a parent class)
@MilanJovanovicTech
@MilanJovanovicTech 7 ай бұрын
Inherit from IConfiguration?
@Red-qz4lx
@Red-qz4lx 7 ай бұрын
Shorthand for the IConfigurationOptions Of course it's a preference of mine, a lot of people would feel uncofortable having such a multiporpuose class
@georgech.3554
@georgech.3554 Жыл бұрын
What is the best way to prevent concurrency on the scaled instance?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Move the job into its own process
@prathameshshende4
@prathameshshende4 Жыл бұрын
Great tutorial Milan. So there will list of customer Name and DOB where I job will check at start of day and suppose there is dob found then send email to particular customer. So do I put this logic and job will not work whole day.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Yes, you can make the job run once a day
@lollol-ko8xx
@lollol-ko8xx Жыл бұрын
Is there a way to configure all instances of IConfigureOptions at once? It would be nice if there was a way that I could pass in the assembly and let the magic happen 😄
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
With an extension method?
@ayalamac
@ayalamac Жыл бұрын
Nice as always Milan! I have a question about this. How to create a project that launches different instances of the same routine in quartz? Off course I haven't finished watching this. But I want to ask you asap
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
What do you mean by different instances?
@Saurabh.P
@Saurabh.P Жыл бұрын
What is the difference between this and .NET 6 introduced PeriodicTimer?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
www.milanjovanovic.tech/blog/running-background-tasks-in-asp-net-core
@Saurabh.P
@Saurabh.P Жыл бұрын
@@MilanJovanovicTech Thanks!
@usmanbacha3449
@usmanbacha3449 6 ай бұрын
On the production environment, we would typically have multiple containers/pods. How can we make sure always one single pod/container runs all jobs. We dont want all pods/containers to execute/run the jobs parallely. How can we implement this. Please help
@MilanJovanovicTech
@MilanJovanovicTech 6 ай бұрын
Environment variable? Or running jobs in a separate container
@raylin2527
@raylin2527 3 ай бұрын
wow! hope i could be an awesome software engineer as you are!!
@MilanJovanovicTech
@MilanJovanovicTech 3 ай бұрын
You can do it
@ibrahimhatess
@ibrahimhatess Жыл бұрын
Hi everyone, I have a question about this. I can't use usemicrosoftdependencyinjection.I keep getting this error message "There must be an empty constructor method". How can I use di in my business class?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Give me a repo I can take a look at?
@ibrahimhatess
@ibrahimhatess Жыл бұрын
I can't do this because of the privacy policy. The version I use is 3.7.0 and it is said that this feature is ignored.
@andrevinicius137
@andrevinicius137 Жыл бұрын
Is a Hangfire vidro coming soon?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Yes! 😁
@june3878
@june3878 Жыл бұрын
I apologize in advance if you mentioned this in the video (my English is very poor so far), what happens if an Exception occurs?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
The task fails 😁 Next one starts as usual... You'd have to handle exceptions, of course
@AbhishekKhatter
@AbhishekKhatter Ай бұрын
Is there any video for implementing the same with embedding Silkier Quartz UI in it
@MilanJovanovicTech
@MilanJovanovicTech Ай бұрын
I haven't used it
@victors16811
@victors16811 Жыл бұрын
Hi Milan, I was able to follow your tutorials successfully, and my job works perfectly in dev, however, after deploying the app in IIS the task does not get executed I am using a job in an API service core net what considerations do I have to take?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
No idea. It should work the same.
@victors16811
@victors16811 Жыл бұрын
​@@MilanJovanovicTech Interestingly, seems like the IIS put the application in sleep mode and shut the application down, and the schedule, when a new request comes to the API the scheduled start.. now I need to figure out how to keep the application always running, or decouple my API from the Quartz service.. any advice is welcome.. thanks -> Application is shutting down... ->Scheduler "QuartzScheduler_$_NON_CLUSTERED" shutting down. ->Scheduler QuartzScheduler_$_NON_CLUSTERED paused. ->Scheduler QuartzScheduler_$_NON_CLUSTERED Shutdown complete.
@KenanAmirli-hg5tw
@KenanAmirli-hg5tw Жыл бұрын
@@victors16811 On IIS configure you set the always running in the IIS .Default IIS deployed service running when the request come in , but if you configure it always running.
@sonnyskold5634
@sonnyskold5634 Жыл бұрын
I did this in production but encountered some errors where it stopped running after x amount of time on server. I think it was application pool timeout or something that caused it. Worth noting though, you would have to set timout to 0 (on windows server)
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
That's the problem with your hosting model, not Quartz
@sonnyskold5634
@sonnyskold5634 Жыл бұрын
Of course, just thought it was worth mentioning in case someone else ran into it or could help someone before they deploy it :)
@ahmedifhaam7266
@ahmedifhaam7266 Жыл бұрын
What's that mean, hosting model
@mallipooalwa9085
@mallipooalwa9085 Жыл бұрын
If you own the server and can control IIS, you need to remove idle timeout.
@mallipooalwa9085
@mallipooalwa9085 Жыл бұрын
If you don't own the server you'll need to trigger one network call within the timeout so that the app pool doesn't sleep.
@souravsingha3340
@souravsingha3340 9 ай бұрын
Please make video about best practice with postgres datetime type. Querying different scene.. With different time zone issue
@MilanJovanovicTech
@MilanJovanovicTech 9 ай бұрын
Just use UTC 😅
@souravsingha3340
@souravsingha3340 9 ай бұрын
@@MilanJovanovicTech i already used.. Actually problem is timespan grouping with dateonly,timeonly..
@souravsingha3340
@souravsingha3340 9 ай бұрын
I got problem when i querying data 2024-03-01 at midnight. Its convert it in utc supposed 2024-02-29.. If query only datey only data. What happened explain this situation??🤔🤔🤔please
@ASIMKHAN-ig9eo
@ASIMKHAN-ig9eo 11 ай бұрын
What do you think will Quartz be a good option or using built-in background jobs provided by aspnetcore ?
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
Quartz is more robust
@ASIMKHAN-ig9eo
@ASIMKHAN-ig9eo 11 ай бұрын
got it. @@MilanJovanovicTech
@nikolaymarchin9296
@nikolaymarchin9296 6 ай бұрын
Is it possible to trigger a command from the Application layer from a quartz job?
@MilanJovanovicTech
@MilanJovanovicTech 6 ай бұрын
It's possible
@nikolaymarchin9296
@nikolaymarchin9296 6 ай бұрын
@@MilanJovanovicTech Thanks for the answer. So I just get an ISender from MediatR in the IJob in the Infrastructure and send a new instance of the command every day for example? Is that an allowed approach when we are using Domain Driven Design?
@MilanJovanovicTech
@MilanJovanovicTech 6 ай бұрын
@@nikolaymarchin9296 Absolutely. Just be mindful that you're sending the command outside an API request, in case you have any dependencies on the HTTP context.
@alexandrehedreville7609
@alexandrehedreville7609 22 күн бұрын
hi Milan, I am trying to run the code on a console app, but job never start. can you explain how to get it running on console app
@MilanJovanovicTech
@MilanJovanovicTech 20 күн бұрын
No idea why
@alexandrehedreville7609
@alexandrehedreville7609 19 күн бұрын
​@@MilanJovanovicTech
@alexandrehedreville7609
@alexandrehedreville7609 19 күн бұрын
After investigating, I found the problem and two possible solutions: 1. Use a HostBuilder within the console, or 2. Create your own QuartzHostedService with your own factory to resolve jobs, etc. Something that doesn't help much is that when Quartz is unable to build the dependencies for a job's constructor, it simply does nothing and doesn't throw any error.
@yohanespradono5224
@yohanespradono5224 4 ай бұрын
it says that UseMicrosoftDependencyInjectionJobFactory is obsolete. how do we change it?
@MilanJovanovicTech
@MilanJovanovicTech 4 ай бұрын
You can freely remove that call, it's no longer needed
@kelleyfitz-sc8lb
@kelleyfitz-sc8lb Жыл бұрын
Does Quartz work with Maui or only web?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Does MAUI support IHostedService?
@kelleyfitz-sc8lb
@kelleyfitz-sc8lb Жыл бұрын
@@MilanJovanovicTech after some research, looks like it does not. Thanks
@jalalmalekpour
@jalalmalekpour 9 ай бұрын
thanks for share videos
@MilanJovanovicTech
@MilanJovanovicTech 9 ай бұрын
You're welcome
@coding-in
@coding-in 2 ай бұрын
I've more than 1 process inside 1 method. Let say 5 process. I want next process run in background so after finished 1st process i want to direct return without waiting other process completed. How?
@MilanJovanovicTech
@MilanJovanovicTech 2 ай бұрын
I didn't understand this
@coding-in
@coding-in 2 ай бұрын
@@MilanJovanovicTech Public Task Method(){ await Process1(); //after this process finished Process2();// in background Process3();// in background Process4();// in background Process5();// in background Return "success"; }
@sunzhang-d9v
@sunzhang-d9v Жыл бұрын
[Obsolete("MicrosoftDependencyInjectionJobFactory is the default for DI configuration, this method will be removed later on")] ?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
The one used here isn't obsolete
@sunzhang-d9v
@sunzhang-d9v Жыл бұрын
我知道,但是最新的包过期了,RabbitMq那个视频使用的包也过期了,能更新一下视频吗@@MilanJovanovicTech
@Meloga41
@Meloga41 Жыл бұрын
Is it an open source library
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Yes
@pepiwi
@pepiwi 8 ай бұрын
muy bueno crack
@MilanJovanovicTech
@MilanJovanovicTech 8 ай бұрын
Ty
@thedjnute
@thedjnute 8 ай бұрын
using this but only 1 of my job gets registered
@MilanJovanovicTech
@MilanJovanovicTech 8 ай бұрын
Use a different name for the job?
@AmericanEnglishAcc
@AmericanEnglishAcc Жыл бұрын
Quartz is just overall inferior to Hangfire. It's extremely verbose and doesn't have built-in, default support for concurrency or distributed environments.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Which is why it's great for simple recurring tasks. You don't need a bulldozer to drill a small hole.
@GreyTaube
@GreyTaube Жыл бұрын
You did not dig many holes have you? Better to dig a small hole in minutes with no worries versus doing it by hand. There are actually arguments for using Quartz, but the video nor your comment mention them.
@ahmedifhaam7266
@ahmedifhaam7266 Жыл бұрын
​@@GreyTaubeI'm actually really interested, when would you need to use Quartz, over hangfire. I can see why something like Serilog (maybe with seq) is soooo much better than built in ILogger or even Elmah. But I am still stuck between what background task scheduler to use.. Hnagfire seems a Lil simpler, comes with dashboard, idk.. everyone recommends Quartz though but I don't yet understand why.
@jerryjeremy4038
@jerryjeremy4038 Жыл бұрын
+1 like, +1 sub. Thanks man
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Awesome! Glad to have you on board!
@amerkovac5247
@amerkovac5247 8 ай бұрын
mašina čovjek
@MilanJovanovicTech
@MilanJovanovicTech 8 ай бұрын
Hvala, živ bio! 😁
@Paul-uo9sv
@Paul-uo9sv Жыл бұрын
Which country was quartz developed in?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
No idea
@Paul-uo9sv
@Paul-uo9sv Жыл бұрын
@@MilanJovanovicTech Tampere, Pirkanmaa, Finland
How to Add Health Checks in ASP.NET Core
11:51
Milan Jovanović
Рет қаралды 21 М.
Scheduling repeating tasks with .NET 6’s NEW Timer
12:47
Nick Chapsas
Рет қаралды 108 М.
УНО Реверс в Амонг Ас : игра на выбывание
0:19
Фани Хани
Рет қаралды 1,3 МЛН
Vampire SUCKS Human Energy 🧛🏻‍♂️🪫 (ft. @StevenHe )
0:34
Alan Chikin Chow
Рет қаралды 138 МЛН
Жездуха 41-серия
36:26
Million Show
Рет қаралды 5 МЛН
My Fourth DevOps Interview Experience
6:32
Sakshi Gautam
Рет қаралды 905
Background Jobs in ASP.NET Core
18:35
IAmTimCorey
Рет қаралды 59 М.
The RIGHT Way To Use HttpClient In .NET
11:46
Milan Jovanović
Рет қаралды 65 М.
Car Management System: Complete GO Lang Project
4:40:00
Code Alley with Anurag
Рет қаралды 6 М.
Schedule Jobs! - Beginner's Guide to Quartz.NET in ASP.NET Core
13:34
Background Tasks Are Finally Fixed in .NET 8
10:29
Nick Chapsas
Рет қаралды 119 М.
How To Build a Load Balancer In .NET With YARP Reverse Proxy
11:33
Milan Jovanović
Рет қаралды 21 М.
The Only .NET Scheduler You Should Be Using!
16:38
Nick Chapsas
Рет қаралды 58 М.
УНО Реверс в Амонг Ас : игра на выбывание
0:19
Фани Хани
Рет қаралды 1,3 МЛН