دوره Background Tasks در Asp.Net Core

در این دوره نحوه استفاده از Background Tasks و Hangfire در Asp.Net Core را به شما آموزش می دهیم

در این دوره نحوه استفاده از Background Tasks  و Hangfire در Asp.Net Core  را به شما آموزش می دهیم

1,990,000 تومان


توضیحات دوره Background Tasks در Asp.Net Core

دوره Background Tasks  در Asp.Net Core
 

دیگر کافی است! کاربران نباید زمان زیادی منتظر دریافت Response از WebApplication شما بمانند!

 

  • با Background Task کاربران WebApplication شما ثانیه‌های زیادی منتظر Response نمی‌مانند.
  • با Background Task سرعت WebApplication خود را چندبرابر افزایش دهید.
  •  Taskهای تکراری را طبق زمان‌بندی که برای آن مشخص کرده‌اید در پس‌زمینه WebApplication به‌صورت خودکار اجرا می‌شوند

برنامه‌نویسان آماتور تمامی نیازهای اپلیکیشن را در درخواست‌های که کاربر به WebApplication  ارسال می‌کند انجام می‌دهند، اما در برنامه‌های مدرن بخشی از نیاز هر WebApplication  را باید در پس‌زمینه انجام دهیم.

 

Background Task چیست؟

 

Background Task  چیست؟


Background Task فرایندی است که در پشت صحنه و بدون دخالت کاربر انجام می شود. فرایند های مانند اطلاع رسانی ها، ثبت Log ، نظارت بر سیستم ... Backgroun Task  بعد از ایجاد به صورت خودکار در پس زمینه  و به صورت مستقل اجرا می شود.

 

چه نوع کارهایی را می‌توانیم در Background Task انجام دهیم؟

 


هر کاری که به بیشتر از ۱ ثانیه زمان نیاز دارد برای تکمیل شدن باید در background Task انجام دهیم، البته به‌شرط آن که نیازی به ارسال پاسخ در همان لحظه برای کاربر نداشته باشیم.
به‌عنوان‌مثال در حالت عادی اعتبارسنجی داده‌های که از طرف کاربر ارسال شده است را باید در همان لحظه برای کاربر ارسال کنیم و کاربر را مطلع سازیم که داده‌های ارسالی معتبر نیستند.
در ادامه ۱۱ مورد از کارهایی که باید در background Task انجام شوند را معرفی می‌کنیم.

1-    ارسال و دریافت پیامک


امروزه Sms به جزء جدایی‌ناپذیر Web Applicationها تبدیل شده است. زمانی که از سرویس‌های ارسال و دریافت پیام کوتاه در WebApplication استفاده می‌کنیم ناخواسته یک تأخیر در Responseهایی که برای کاربر ارسال می‌شود را ایجاد کرده‌ایم.
این تأخیر به این دلیل است که ما داریم یک وب‌سرویس خارج از WebApplication در بستر اینترنت استفاده می‌کنیم و همین می‌تواند باعث کندی استفاده از آن وب‌سرویس باشد.  
با استفاده از Background Task  می‌توانیم   Sms را در پس‌زمینه ارسال کنیم و کاربر مجبور نیست مدت‌زمان زیادی برای دریافت Response  منتظر بماند.
اما در یک Web Application مدرن فقط ارسال و دریافت یک پیامک ساده مثل کد اعتبارسنجی، نداریم. ممکن است بخواهیم گزارش‌هایی برای دسته‌ای از کاربران Sms کنیم. مثلاً هر هفته ساعت ۲۳ روز جمعه یک گزارش از فروش هفته جاری برای مدیران فروش ارسال کنیم و یا ۶ماهه اول سال  آخرین چهارشنبه هر ماه بخواهیم یک Sms تبلیغاتی برای کاربران ارسال کنیم.
دیگر در این شرایط اگر از Background Taskها استفاده نکنیم قادر به توسعه و پیاده‌سازی  همچنین فیچرهایی نداریم.


2-    تماس تلفنی


در حال حاضر ما می‌توانیم در اپلیکیشن‌های خودمان با استفاده از سرویس‌های که ارائه شده است قابلیت تماس تلفنی ایجاد نماییم.
همه ما به‌خوبی می‌دانیم که برقراری یک تماس تلفنی می‌تواند چقدر زمان‌بر باشد، و از حوصله کاربر خارج است که  در پشت یک اپلیکیشن قفل شده منتظر بماند برای تکمیل یک فرایند که شاید ده‌ها ثانیه طول بکشد.
و شاید در اپلیکیشن خود طبق برنامه زمان‌بندی می‌خواهید هر هفته ساعت ۱۰ صبح روز شنبه با تعدادی از مشتریان تماس گرفته شود و  یک‌صدای از قبل ضبط شده برای آن‌ها پخش شود.
اگر در اپلیکیشن خود از سرویس‌های تماس تلفنی استفاده می‌کنید حتماً باید با Background Taskها آشنایی داشته باشید که بتوانید یک Web Application  مدرن طراحی و پیاده‌سازی نمایید.

 

3-    ارسال ایمیل


ارسال ایمیل هم دقیقاً شرایط ارسال Sms را دارد و از بخش‌های مختلفی از Web Application مورداستفاده قرار می‌گیرد یا حتی طبق برنامه زمان‌بندی شده‌ای ایمیل‌هایی برای کاربران ارسال می‌کنیم.
برای ارسال ایمیل هم قاعدتاً داریم از یک وب‌سرویس استفاده می‌کنیم و این هم می‌توانید تأخیر در Application ایجاد کند.
مطمئنم تابه‌حال در Web Applicationهای خود فواید ارسال ایمیل را پیاده‌سازی کرده‌اید، و اگر ارسال ایمیل را در پس‌زمینه انجام نداده‌اید، دردی که کاربران شما برای منتظر ماندن برای Response یک Request  که در آن یک یا چند ایمیل هم ارسال شده است را به‌خوبی درک می‌کنید.
با استفاده از background Task  می‌توانید برای همیشه این درد انتظار را از کاربران Web Application دور کنید و با ارائه سرعت بالاتر حس رضایت و خوشحالی را به آنها منتقل کنید.


4-    Push Notification


با استفاده از Notification  می‌توانیم پیغام‌هایی برای کلاینت‌های مختلف از سمت سرور ارسال نماییم. برای ارسال notification  می‌توانیم از سرویس‌های third party  که مخصوص Push Notification ارائه شده‌اند استفاده کنیم و یا خودمان Push Notification  را پیاده‌سازی کنیم.
درهرصورت ارسال Notification باید در پشت‌صحنه Web Application انجام شود.


5-    Web Crawler


کار خزنده وب این است که url و یا urlهایی برای آن مشخص کنیم و برود اطلاعاتی که ما نیاز داریم را جمع‌آوری نمایید و بعد از پردازش در مکانی که برای آن مشخص می‌کنیم ذخیره نماید.
از نام خزنده وب می‌توان حدس زد که چقدر کار زمان‌بری است، حتی اگر قرار باشد فقط یک url با دیتای حداقلی را به دست بیاورد.
اگر در Web Application خود از خزنده وب استفاده می‌کنیم حتماً انجام این فرایند را در پس‌زمینه Application انجام دهید.


6-    استخراج داده‌ها


ممکن است بخواهید عملیات‌های مختلفی بر روی دیتاهای خود در Application انجام دهید که کار زمان‌بری باشد.
مثلاً فرض کنید به دلیل سرعت بسیار بالاتر دیتابیس Redis در درج اطلاعات جدید نسبت به SqlServer می‌خواهید دیتاهای ورودی به Application  را در Redis ثبت کنید (برای این که بتوانید هم‌زمان داده‌های بیشتری را ذخیره نمایید) و سپس همان داده‌ها را از Redis به Sql Server منتقل نمایید.
انتقال این داده‌ها باید در Background Task  انجام شود.


7-    پردازش‌های Big Data


امروزه کسب‌وکارهای اینترنتی با مفهومی به نام Big Data درگیر هستند. Big Data  به داده‌های بسیار زیادی که ساختاربندی شده یا نشده‌اند گفته می‌شود.  Big Data ممکن است حجم عظیمی از اطلاعات  با تنوع بالایی داشته باشد که با سرعت بسیار زیادی در حال رشد است.
پردازش این اطلاعات می‌تواند در تصمیم‌گیری کسب‌وکار تأثیرات مثبتی بگذارد و باعث رشد کسب‌وکار شود. شاید در کسب‌وکاری که مسئول توسعه Applicationهای آن هستید مجبور به پردازش‌های Big Data باشید، این نوع پردازش‌ها را باید در Background Task  انجام دهید.


8-    کارهای که باید طبق برنامه زمان‌بندی اجرا شوند


فرض کنید کسب‌وکاری که درحال‌توسعه Application  آن هستید قصد دارد آخرین جمعه هر ماه محصولات وب‌سایت را تخفیف ویژه به فروش برساند.
و شما نیاز دارید چند روز قبل از آخرین جمعه هر ماه در Aeb Application به‌صورت خودکار ایمیل‌ها و smsها برای مشتریان وب‌سایت ارسال نمایید

   •    مثلاً ۳ روز مانده به آخرین جمعه هر ماه ایمیل برای همه مشتریان ارسال شود و آنها را از فروش ویژه آخر ماه باخبر سازد.
   •    یک روز مانده به آخرین جمعه هر ماه sms برای همه مشتریان ارسال شود.
   •    آخرین جمعه هر ماه تخفیف‌ها بر روی سایت اعمال شود و بعد از فعال‌سازی sms و ایمیل برای همه کاربران ارسال شود.
   •    و در نهایت هم در ساعت ۲۳:۵۹:۵۹ آخرین جمعه هر ماه تخفیف‌ها را از روی وب‌سایت بردارد.

برای انجام همچون فرایندهایی باید حتماً از Background Task  و برنامه زمان‌بندی Cron استفاده نمایید.

9-    پردازش تصویر


در Application خود کارهای مختلفی با تصاویر می‌توانیم انجام دهیم. به‌عنوان‌مثال اگر درحال‌توسعه یک Application در حوزه حمل‌ونقل باشید نیاز دارید که از پردازش تصویر برای تشخیص پلاک خودرو استفاده نمایید و یا در Application دیگری نیاز به تشخیص چهره با پردازش تصویر دارید.

و یا حتی در ساده‌ترین حالت آن فرض کنید در وب‌سایتی که طراحی کرده‌اید کاربر قرار است یک تصویر از خود برای پروفایل خود آپلود کند و حالا شما در اکشن آپلود می‌خواهید  سه کارهای زیر را انجام دهید
   •    اندازه تصویر را تغییر دهید.
   •    با فشرد سازی تصویر آپلود شده حجم تصویر را تا 70% کاهش دهید.
   •    یک سایز ۵۰ * ۵۰ از تصویر اصلی برای thumbnail  ایجاد کنید.

شاید انجام این عملیات زمان‌بر باشد، و اگر در background Task  انجام نشود، کاربر مجبور است زمان زیادی منتظر انجام این عملیات شود. پس اگر از پردازش تصویر در application خود استفاده می‌کنید حتماً آن را در Background Task انجام دهید.


10-    ایجاد فایل‌ها در سمت سرور


گاهی نیاز داریم برای کاربران یک فایل از اطلاعات ایجاد کنیم، و یا می‌خواهیم گزارشی برای کاربر آماده کنیم که پردازش اطلاعات آن شاید بیش از ۱ دقیقه زمان ببرد.
به‌محض این که درخواست از سمت کاربر به backend رسید، نباید کاربر را منتظر آماده‌شدن گزارش یا ایجاد فایل بگذارید. باید در همان لحظه Response را برای کاربر ارسال نمایید و در پس‌زمینه به آن اطلاع دهید که Task در حال انجام است و منظر بمانید، به‌محض آماده‌شدن گزارش و یا ایجاد فایل از طریق Signalr  و ... به کاربر آماده می‌دهیم که Task آماده شد و اطلاعات را در اختیار او قرار می‌دهیم.
با این کار حس بسیار خوبی در کاربر Application  ایجاد کرده‌ایم.


11-    WebHooks


Webhook شبیه به ارسال notification  است و زمانی که در اپلیکیشن خود از webhook استفاده می‌کنید باید در زمان رخداد یک رویداد اطلاعاتی را به یک url ارسال کنید که این عملیات هم می‌تواند زمان‌بر باشد و باید آن را در پشت‌صحنه Application انجام دهیم.

 

چطور می‌توانیم Background Task  ایجاد کنیم؟


1-    Asp.Net Core


در Asp.Net Core  نسخه 2.0 IHostedService برای اجرای Taskهای پس‌زمینه ارائه شد و در نسخه‌های بعدی امکانات دیگری هم اضافه شد که با استفاده از کلاس Timer در کنار این ویژگی‌ها می‌توانیم Background Task  را در Asp.Net Core  ایجاد کنیم


2-    Hangfire


Hangfire ابزاری است که برای مدیریت و زمان‌بندی Jobها در DotNet  ارائه شده است. استفاده از Hangfire پیچیدگی بالایی ندارد و قابلیت توسعه و نگهداری بالایی دارد که همین دلایل باعث شده است در پروژه‌های زیادی از این ابزار استفاده شود.


3-    Quartz.NET


Quartz یک ابزار زمان‌بندی قوی است که برای زبان جاوا توسعه داده شده است و بعد از مدتی برای .Net هم با نام Quartz.Net  ارائه شد.
استفاده از Quartz.Net  نسبت به Hangfire پیچیده‌تر است و توسعه‌پذیری کمتری دارد اما با این‌حال در زمان‌بندی‌های بسیار پیچیده بهتر عمل می‌کند.


در این دوره چه خواهید آموخت؟


در دوره آموزش background Task در Asp.Net Core شما با Background Taskها آشنا می‌شوید و یاد خواهید گرفت چطور می‌توانید Taskهای خود را در پشت‌صحنه Application اجرا کنید.

فصل اول Background Task in .Net
بدون نیاز به هیچ ابزاری در Net. می‌توانیم background Taskها را ایجاد و اجرا کنیم و در فصل اول این دوره به شما یاد خواهیم داد چطور درNet. تسک‌های پس‌زمینه ایجاد کنید و در پشت‌صحنه Application آنها را اجرا کنید.
فصل دوم آموزش Hangfire
با وجود این که خود Net. به ما امکان ایجاد و اجرای تسک‌های پس‌زمینه را می‌دهد، اما برای به‌دست‌آوردن امکانات بیشتر می‌توانیم از hangfire برای مدیریت و اجرای background Taskها استفاده کنیم.
در فصل دوم به آموزش کامل Hangfire می‌پردازیم و بعد از فصل دوم شما می‌توانید background Taskهای  مختلفی با hangfire ایجاد و اجرا کنید و نحوه  Tracking  انجام کارها را به شما آموزش می‌دهیم که بتوانید UX بهتری با پیگیری انجام کار و نمایش آن به کاربر ارائه دهید.


 
گاهی دیدن چند ساعت آموزش می‌تواند تأثیر قابل‌توجهی در روند کاری ما ایجاد کند. قدرت واقعی یک برنامه‌نویس به دانشی است که دارد و هرچه این دانش بیشتر باشد و از دانش بتوانید به‌خوبی استفاده نماید، قدرت برنامه‌نویس هم بیشتر می‌شود.
با شرکت در این دوره به‌صورت کامل به background Taskها مسلط می‌شوید و قدرت شما برای انجام پروژه‌های بزرگ‌تر و پیچیده‌تر بیشتر می‌شود.

 

نگاهی به دوره Background Tasks در Asp.Net Core



مدرس احسان بابائی
مخاطب برنامه‌نویسان
فصل 2‌
مدت زمان 07:30:03
سطح پیشرفته
وضعیت تکمیل شده
تعداد جلسات 34
فرمت

فیلم محافظت‌شده (مشاهده آنلاین در پلیر مخصوص)

قابل مشاهده

در دو سیستم ویندوز یا اندروید

قیمت 1,990,000 تومان

ویدئوهای دوره Background Tasks در Asp.Net Core

1
آشنایی با CancellationTokens

00:10:42

2
استفاده از Timer در .Net

00:15:10

3
نحوه استفاده از IHostedService

00:22:32

4
نحوه استفاده از BackgroundService

00:06:03

5
دریافت پیغام از RabbitMQ توسط یک تسک پس زمینه

00:10:45

6
آشنایی با Channel در سی شارپ

00:14:00

7
اجرای تسک های پس زمینه در صف - بخش اول

00:24:17

8
اجرای تسک های پس زمینه در صف - بخش دوم

00:09:01

9
کار با WorkerService

00:29:53

1
معرفی Hangfire

00:05:21

2
ویژگی هایHangfire

00:08:39

3
انواع job در Hangfire

00:08:38

4
معماری Hangfire

00:03:19

5
راه اندازی Hangfire

00:14:16

6
آماده سازی پروژه

00:12:34

7
آشنایی با داشبورد Hangfire

00:08:21

8
امنیت در داشبورد Hangfire

00:14:04

9
آشنایی با Fire and Forget Jobs

00:16:20

10
آشنایی با Delayed Jobs

00:12:39

11
آشنایی با Recurring Jobs

00:27:43

12
آشنایی با Continuations Jobs

00:10:35

13
ارسال پارامتر به Job ها

00:05:07

14
تزریق وابستگی در Hangfire

00:08:02

15
تنظیمات Automatic Retry

00:12:10

16
تنظیمات داشبورد Hangfire

00:11:29

17
نحوه نوشتن UnitTest برای Hangfire

00:14:18

18
جداسازی HangfireServer و HangfireClient

00:13:47

19
استفاده از Queue

00:08:57

20
آشنایی با Worker ها

00:08:13

21
آشنایی با Push و Pull برای Tracking Job

00:08:14

22
آماده سازی پروژه برای Push Tracking

00:14:46

23
پیاده سازی Push Tracking - بخش اول

00:21:51

24
پیاده سازی Push Tracking - بخش دوم

00:21:19

25
آشنایی با jobFilter

00:16:58

ثبت دیدگاه

برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید

دیدگاه کاربران

avatar
Rohollah Hoseyni
1402/12/16 (خریدار محصول)

سلام Web Crawler  هم اموزش داده میشه در این دوره؟

avatar
پاسخ توسط احسان بابائی
1402/12/20

سلام جناب حسینی
خیر، این دوره نحوه استفاده از هنگ فایر برای همچین سناریوهایی است و Web Crawler  در این دوره آموزش داده نمی شود.


avatar
آرمان
1402/06/10 (خریدار محصول)

فایل های سورس کد پروژه رو از کجا میشه دانلود کرد؟

avatar
پاسخ توسط احسان بابائی
1402/06/10

بعد از لاگین 

وارد همین صفحه بشوید 

در لیست قسمت ها هر قسمتی که سورس داشته باشید دکمه سبز رنگ دانلود سورس را می‌بینید.


avatar
حسن غویشه
1402/03/28 (خریدار محصول)

درود وقت بخیر

 

لینک های دانلود مشکل داره

 

ی بارم که داشت دانلود میکرد آخراش خطا داد :|

 

لطفا بررسی نمایید

avatar
پاسخ توسط پشتیبانی باگتو
1402/03/28

  سلام،
فیلم‌های دوره که از طریق اسپات پلیر قابل دانلود و مشاهده هستند.
اگر منظور شما دانلود سورس کدها بود، امروز برای چند لحظه مشکلی در سرور دانلود رخ داد که احتمالا شما نیز در همان زمان با این مشکل مواجه شده‌اید.
از اینکه این موضوع را به ما اطلاع دادید، سپاسگزارم.


avatar
رضا ساغری
1402/02/06 (خریدار محصول)

درود و ادب

آیا در این دوره نحوه ایجاد یک task از طریق کد نویسی در hangfire رو هم آموزش میدید؟

ضمنا آیا امکانش هست که لیست عنوان قسمت های دوره را برام ایمیل کنید یا به اطلاعات دوره اضافه کنید تا بتونم ببینم که اگر برام مفید است خریداری کنم.

سپاس فراوان

avatar
پاسخ توسط پشتیبانی باگتو
1402/02/06

درود بر شما،

در این دوره، تقریبا تمامی موارد مورد نیاز برای کار با ابزار Hangfire آموزش داده شده است.


avatar
اشکان تست
1401/09/10 (خریدار محصول)

با سلام

در توضیحات دوره اشاره شده است که سورس کد دارد. از کجا میتونم دسترسی به سورس کد دوره داشته باشم؟

avatar
پاسخ توسط پشتیبانی باگتو
1401/09/11

سلام

در صفحه دوره، بعد از لاگین ، کنار هر ویدئو یک دکمه سبز رنگ برای دانلود سورس قرار دارد.

هر قسمتی که سورس داشته باشد بر روی دکمه دانلود کلیک نمایید سورس آن قسمت دانلود می شود.

دانلود سورس


avatar
محمد رمضانی
1401/08/20 (خریدار محصول)

سلام استاد وقت بخیر آموزش خوبی بود فقط من میخواستم از هنگ فایر برای پروژه web api استفاده کنم برای پابلیش روی سرور باید کار خاصی انجام دهم یا نیازی نیست و مانند لوکال درست اجرا میشود

avatar
پاسخ توسط پشتیبانی باگتو
1401/08/20

سلام

نیاز به کار خاصی نیست. بعد از پاپلیش و تنظیم کانفیگ ها می تونید بر روی سرور هم از این پکیج استفاده نمایید


avatar
pourya
1401/04/14

بجای این نمیتونم از parallel استفاده کنیم ؟ 

avatar
پاسخ توسط پشتیبانی باگتو
1401/04/18

خیر،

paraller مبحث جداگانه ای است که در دوره ستارگان سی شارپ آموزش داده می شود.


avatar
parastoo
1401/04/14 (خریدار محصول)

سلام 

ببخشید این دوره برای کسانی که asp.net mvc c# کتر می کنن هم مفیده یا فقط برای دانت coreهستش؟؟؟

ممنون

avatar
پاسخ توسط پشتیبانی باگتو
1401/04/14

سلام

تسک های پس زمینه در انواع مختلف پروژه های دات نت می توانید استفاده نمایید.

hangfire هم در .Net Freamwork قابل استفاده می باشد.

اما در این دوره ما مباحث را در Asp.Net Core  پیاده سازی می کنیم.

برای شما هم می تواند مفید باشد. 


avatar
هادی رکن آبادی
1401/03/20 (خریدار محصول)

سلام

جناب بابائی چطور میتونیم از پنل hangfire داخل قالب اختصاصی خودمون استفاده کنیم ؟

من برای پنل ادمینم از قالب Beyond Admin استفاده میکنم میخوام پنل داخل این layout نمایش داده بشه

avatar
پاسخ توسط احسان بابائی
1401/03/22

سلام

در nuget به دنبال پکیج هایی که داشبورد هنگ فایر را اختصاصی می کنند بگردید. اکثر این پکیج ها اوپن سورس هستند و سورس آنها را بررسی کنید ببینم به چه صورت این کار را انجام داده اند

و از آنها برای کار خودتان الگوبرداری نمایید


avatar
هادی رکن آبادی
1401/03/19 (خریدار محصول)

سلام

جناب بابائی متدی که میخوایم در پس زمینه اچرا بشه دیگه نباید async task باشه درسته ؟

avatar
پاسخ توسط احسان بابائی
1401/03/19

سلام متدهای Async هم می توانند به عنوان job در Hangfire استفاده شوند.

_backgroungJobClient.Enqueue(() => _emailService.SendAsync(data));

این که استفاده از Async برای شما آورده ای دارد یا نه؟ ابتدا باید تسلط کاملی بر Asynchrony  داشته باشید و سناریو خود را بررسی کنید.


avatar
محمد سجاد بیغرض
1401/03/06 (خریدار محصول)

سلام این دوره برای برنامه نویس های ویندوز هم مناسب هست؟ یعنی میشه برای wpf هم استفاده کرد؟

avatar
پاسخ توسط احسان بابائی
1401/03/06

سلام

بله ، در انواع مختلف پروژه هاي دات نت مي تولنيم از تسك هاي پس زمينه استفاده كنيم.

اما برخي از مطالب دوره مناسب شما نيست و مخصوص web مي باشد


avatar
Mohammad Dastyar
1401/03/04

با سلام
آیا می توان با استفاده از این تکنیک یک متد یا api را در زمان های تعریف شده فراخوانی کرد؟

 

avatar
پاسخ توسط احسان بابائی
1401/03/04

سلام 

بله ، مي توانيد كار مورد نظر را در يك متد بنويسيد و آن متد را در job هاي hangfire استفاده كنيد. 

هر كدي از جمله فراخواني متد ها و api ها و... را ميتوان در زمانبندي تعريف كرد


avatar
محمد رمضانی
1401/03/04 (خریدار محصول)

یک دوره بی نظیر و فوق کاربردی دوستانی که به صورت حرفه ای برنامه نویسی میکنند توصیه میکنم این آموزش رو از دست ندید


avatar
reza
1401/03/02 (خریدار محصول)

سلام اگه میشه یه دوره DDD هم بزارید,ممنون واسه دوره های خوبتون